当我编写 Java webapps 时,我通常使用 JSTL 标签。我认为这些标签很棒,除了让我生气的一件事:虽然表达式语言允许您访问 bean 属性,但它不允许您调用它的方法。
在 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要对我们这样做吗?