7
votes

Comment vérifier Isnumeric / Isnumber à JSTL?

Comment faire ce chèque simple dans JSTL (sans extension de classes Java et de fonctions JSP supplémentaires). J'en ai besoin comme ceci: xxx

merci d'avance.


0 commentaires

3 Réponses :


2
votes

Vous pouvez créer une fonction personnalisée comme expliqué dans les tutoriels suivants:

  1. Création de fonctions personnalisées dans JSSL à l'aide de JSTL li>
  2. Comment créer une fonction personnalisée pour JSTL li>
  3. Un autre tutoriel A > li> ol>

    étapes pour créer une fonction des liens ci-dessus: strong> p>

    1. Créer un .tld code> fichier sous / web-inf code>: p>

      <%@page contentType="text/html" pageEncoding="UTF-8"%>
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
          "http://www.w3.org/TR/html4/loose.dtd">
      <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
      <%@taglib uri="http://www.rasabihari.com/functionalTlds" prefix="ftld" %>
      <html>
      <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <title>JSP Page</title>
      </head>
      <body>
          <c:if test="${ftld:isNumeric('123')}">
             <!-- ... do something ...
                 This block will run
              -->
          </c:if>
      </body>
      </html>
      
    2. Créez une classe avec la méthode (la logique de la méthode est extraite de ici , il utilise expression régulière ) p>

      package com.expressions;
      
      /**
        *
        * @author rasabihari
        */
      public class Functions {
          public static boolean isNumeric(String number) {  
              boolean isValid = false;  
              /*
              Explaination: 
              [-+]?: Can have an optional - or + sign at the beginning. 
              [0-9]*: Can have any numbers of digits between 0 and 9 
              \\.? : the digits may have an optional decimal point. 
              [0-9]+$: The string must have a digit at the end. 
              If you want to consider x. as a valid number change  
              the expression as follows. (but I treat this as an invalid number.). 
              String expression = "[-+]?[0-9]*\\.?[0-9\\.]+$"; 
              */  
      
              String expression = "[-+]?[0-9]*\\.?[0-9]+$";  
              CharSequence inputStr = number;  
              Pattern pattern = Pattern.compile(expression);  
              Matcher matcher = pattern.matcher(inputStr);  
      
              if(matcher.matches()){  
                  isValid = true;  
              }
      
              return isValid;  
          }
      }  
      
    3. puis utilisez-le dans le JSP comme suit: p>

      <?xml version="1.0" encoding="UTF-8"?>
      <taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
           <tlib-version>1.0</tlib-version>
           <short-name>functionalTlds</short-name>
           <uri>http://www.rasabihari.com/functionalTlds</uri>
           <function>
               <name>isNumeric</name>
               <function-class>com.expressions.Functions</function-class>
               <function-signature>boolean isNumeric(java.lang.String)</function-signature>
           </function>
      </taglib>
      


0 commentaires

6
votes

Si vous insistez vraiment sur

(sans extension de classes Java et de fonctions JSP supplémentaires) p> blockQuote>

alors vous pouvez utiliser le hack suivant. P>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="x" value="8" />
<c:catch var="isNumber">
   <c:set var="x" value="${x * 1}" />
</c:catch>
<c:if test="${isNumber == null}">
    ... do something ...
</c:if>
<c:if test="${isNumber != null}">
      ... do not do anything...
</c:if>


1 commentaires

Je ne savais pas sur , ce n'est pas une solution parfaitement soignée, mais cela fait le travail. On pourrait affirmer que c'est abuser des exceptions, mais s'il s'agit d'une "exception" de recevoir un numéro et que vous vous attendez à un nombre, cela n'est pas trop mauvais. Dans de nombreux cas, le code pourrait également être plus simple, plus comme



10
votes

Si votre environnement prend en charge la nouvelle fonctionnalité EL 2.2 d'invoquer des méthodes non getter sur les objets EL (disponibles dans tous les conteneurs compatibles de servlets 3.0, tels que Tomcat 7, Glassfish 3, etc.), vous pouvez simplement utiliser le < a href = "http://docs.oracle.com/javase/6/docs/api/java/lang/string.html#matches%28java.lang.string%29"> String # correspond () < / code> méthode directement dans el. xxx

(je laisserai le moins - et les milliers et les séparateurs de fraction , et . en dehors de la contrepartie de caractères possibles pouvant apparaître dans un numéro techniquement valide)

Notez que le avec l'expression dans son corps convertit implicitement tout type à chaîne à l'aide de Valeur de la chaîne de () . Sinon, les correspondent () appel dans échouerait pour non- chaîne types.


0 commentaires