Se l'ambiente supporta la nuova funzione EL 2.2 di invocare metodi non-getter su oggetti EL (che è disponibile in tutti i 3,0 contenitori compatibili Servlet, come Tomcat 7, Glassfish 3, ecc), allora si potrebbe basta usare il metodo String#matches()
direttamente in EL.
<c:set var="numberAsString">${someExpressionToTestForNumber}</c:set>
<c:if test="${numberAsString.matches('[0-9]+')}">
It's a number!
</c:if>
(lascio il -
meno e le migliaia e separatori frazione ,
e .
fuori considerazione come possibili personaggi che possono apparire in un numero tecnicamente valido)
Nota che il <c:set>
con la espressione nel suo corpo converte implicitamente qualsiasi tipo in String
utilizzando String#valueOf()
. In caso contrario, la chiamata matches()
in <c:if>
non riuscirà per i tipi non String
.
Non sapevo di, non è una soluzione perfettamente accurata, ma fa il lavoro.Si potrebbe obiettare che si tratta di un'eccezione alle eccezioni, ma se si tratta effettivamente di un'eccezione per ricevere un numero e ci si aspetta un numero, questo non è in realtà un problema. In molti casi il codice potrebbe anche essere più semplice, più come –
marc82ch