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: merci d'avance. p> p>
3 Réponses :
Vous pouvez créer une fonction personnalisée comme expliqué dans les tutoriels suivants:
étapes pour créer une fonction des liens ci-dessus: strong> p> Créer un 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>
puis utilisez-le dans le JSP comme suit: p>
.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>
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;
}
}
<?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>
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>
Je ne savais pas sur
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"> (je laisserai le moins Notez que le String # correspond () < / code> méthode directement dans el.
- code> et les milliers et les séparateurs de fraction
, code> et
. code> en dehors de la contrepartie de caractères possibles pouvant apparaître dans un numéro techniquement valide) em> p>
chaîne code> à l'aide de
Valeur de la chaîne de () code>. Sinon, les
correspondent () code> appel dans
chaîne code> types. P> p>