Jeśli środowisko obsługuje nowy EL 2.2 cechę wywoływanie metod non-getter na obiektach EL (który jest dostępny we wszystkich Servlet 3.0 kompatybilnych pojemnikach, takich jak Tomcat 7, GlassFish 3, etc), a następnie można po prostu użyj metody String#matches()
bezpośrednio w EL.
<c:set var="numberAsString">${someExpressionToTestForNumber}</c:set>
<c:if test="${numberAsString.matches('[0-9]+')}">
It's a number!
</c:if>
(Zostawię -
minus i tysiące i separatory frakcji ,
i .
poza rozważenia jako możliwych znaków, które mogą pojawić się w sposób technicznie prawidłowy numer)
Należy zauważyć, że z <c:set>
wyrażenie w jego ciele body niejawnie konwertuje dowolny typ na String
przy użyciu String#valueOf()
. W przeciwnym razie wywołanie matches()
zadzwoniłoby pod <c:if>
dla typów nie-.
Nie wiedziałem o, to nie jest idealnie zadbane rozwiązanie, ale spełnia swoją rolę.Można argumentować, że jest to nadużywanie wyjątków, ale jeśli w rzeczywistości jest to "wyjątek" do otrzymania liczby i spodziewamy się liczby, to w rzeczywistości nie jest tak źle. W wielu przypadkach kod może być prostszy, bardziej podobny do –
marc82ch