Wenn Ihre Umgebung die neue EL 2.2 Funktion des Aufrufens nicht-Getter-Methoden auf EL-Objekte unterstützt (die in allen Servlet 3.0 kompatible Container wie Tomcat 7, Glassfish 3, etc. verfügbar ist), dann könnte man Verwenden Sie einfach die String#matches()
Methode direkt in EL.
<c:set var="numberAsString">${someExpressionToTestForNumber}</c:set>
<c:if test="${numberAsString.matches('[0-9]+')}">
It's a number!
</c:if>
(Ich werde das Minus -
und die Tausende und Fraktion Separatoren ,
und .
außerhalb Betrachtung als mögliche Zeichen verlassen, die in einer technisch gültige Zahl angezeigt)
Beachten Sie, dass die <c:set>
mit der Ausdruck in seiner Körper konvertiert implizit jeden Typ zu String
mit String#valueOf()
. Andernfalls würde der matches()
Anruf in <c:if>
für nicht String
Typen fehlschlagen.
Ich wusste nicht über , es ist keine perfekt saubere Lösung, aber es macht den Job.Man könnte argumentieren, dass man Ausnahmen missbraucht, aber wenn es tatsächlich eine "Ausnahme" ist, eine Nummer zu erhalten und man eine Zahl erwartet, ist das eigentlich nicht so schlimm. In vielen Fällen könnte der Code auch einfacher sein, eher wie –
marc82ch