Когда я пишу веб-приложения на Java, я обычно использую теги JSTL. Я думаю, что эти теги хороши, за исключением одной вещи, которая меня бесит: хотя язык выражений позволяет вам получать доступ к свойствам бина, он не позволяет вам вызывать его методы.
В версии 1.0 даже не было возможности получить длину строки или количество элементов в коллекции. Начиная с версии 1.1, была добавлена функция fn: length, так что вы можете делать такие вещи как:
...
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
<c:if test="${fn:length(str) > 10}">
...
</c:if>
...
Что более многословно и более некрасиво (ИМХО), чем:
...
<c:if test="${str.length() > 10}">
...
</c:if>
...
Похоже, что JSTL 2.0 позволит вам определять новые функции, но вам нужно будет написать класс специально для этой цели, в котором вы будете определять свои (статические) методы, а также вам нужно будет написать файл TLD. это будет включено в каждый jsp, который будет использовать эти функции.
Независимо от того, определяете ли вы пользовательскую функцию или используете другой обходной путь, вам нужно написать много дополнительного кода.
Я где-то читал, что JCP добровольно запретил вызов методов из языка выражений.
Может кто-нибудь из вас помочь мне понять, почему, черт возьми, JCP делает это с нами?