EL中的方法调用

Mau*_*rry 5 java jsp jstl

当我编写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>
...
Run Code Online (Sandbox Code Playgroud)

哪个更冗长,更丑陋(恕我直言)比:

...
<c:if test="${str.length() > 10}">
    ...
</c:if>
...
Run Code Online (Sandbox Code Playgroud)

它接缝JSTL 2.0将允许您定义新功能,但您需要专门为此目的编写一个类,您将在其中定义(静态)方法,并且您还需要编写一个TLD文件.包含在将使用这些功能的每个jsp中.

无论您是定义自定义函数还是使用其他解决方法,都需要编写大量其他代码.

我在某处读过JCP自愿禁止从表达式语言中调用方法.

你们中的任何人都可以帮助我理解为什么JCP会对我们这么做吗?

McD*_*ell 3

您想要的功能在JSR 245中定义(更多信息请参见此处)。如果您现在需要它,请从UEL 项目或替代实现(例如JUEL )下载它。如果需要等待它成为标准的一部分,它将包含在 JEE6 中。在那之前......好吧,你已经知道你的选择了。