当我编写Java webapp时,通常使用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为什么对我们这样做吗?
所需的功能在JSR 245中定义(更多信息在此处)。如果现在想要,请从UEL项目或其他实现(例如JUEL)中下载。如果您需要等待它成为标准的一部分,它将包含在JEE6中。在那之前…好吧,您已经知道您的选择。