java - EL 中的方法调用

标签 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>
...

哪个比以下更冗长和更丑陋(恕我直言):

...
<c:if test="${str.length() > 10}">
    ...
</c:if>
...

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

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

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

你们谁能帮我理解 JCP 到底为什么要对我们这样做?

最佳答案

Can anyone of you help me understand why the hell is the JCP doing this to us?

它是 bondage and discipline 的一部分Java 程序员的特定子集的心态,他们知道每个人都应该编写应用程序的唯一正确方法。

在编写模板时,您不能相信拥有一门功能强大的语言供您使用,因为您可能会像那些糟糕、粗鲁的 PHP 编码员那样滥用它来混合业务逻辑和表示。呃,想象一下!

程序员是敌人,必须防止他们做坏事。事实证明,程序员实际上只是你在尝试调试某些东西,或者进行快速破解以使应用程序暂时运行。或者它可能会证明存在表示逻辑这样的东西,并且让您将这些东西移出到应用程序中的一堆标记和 bean 类中与其他方式一样令人不快。

不过没关系!为了捍卫 Java 的纯洁性,给您带来不便是非常值得的。

[抱歉打扰了,但这已经是一个相当粗鲁的问题了嗯。]

附言。我想总是有 Groovy。

关于java - EL 中的方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/692615/

相关文章:

java - Swing 组件打印文本与显示文本的方式不同

java - Maven - 如何管理具有共同依赖项的多个 jar

jSTL - 我如何检查是否使用 jSTL 设置了属性(不是 null 也不是空字符串)?

spring - 在spring mvc中将多个参数从 View 传递给 Controller

jsp - 如何在JSTL中查找HashMap是否为空/空?

java - Selenium 2 : Webdriver : How to create my custom wrapper class for selenium components?

java - 如何在 Java 类之间共享公共(public)代码

java - 标签库的目的?

jsp - webapp 与 WEB-INF 下的 spring mvc 和 jsp 页面位置

java - Struts 数据库列表未显示在 JSP 页面中