在 JSP/JSTL/EL 中访问集合的大小 [重复]
Posted
技术标签:
【中文标题】在 JSP/JSTL/EL 中访问集合的大小 [重复]【英文标题】:Access the size of a collection in JSP/JSTL/EL [duplicate] 【发布时间】:2011-04-04 12:28:23 【问题描述】:我的 JSP 页面中有一个名为 services
的 List 变量。如果列表中有超过 1 个元素,我需要在页面上添加一些标记。
我想做的是……
<c:if test="$services.size() gt 1">
<!-- markup... -->
</c:if>
但是你不能在 EL 中调用 Java 对象的方法(我想这可能是我后悔这个事实的第 364823782 次)。您只能通过删除“get”来访问 Java 对象上的 getters,例如$user.name 用于具有 getName() 方法的 User 类。
评估此测试的正确方法是什么?
【问题讨论】:
【参考方案1】:在jsp文件中包含标签库
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
使用
<c:if test="$fn:length(services) gt 1">
<!-- markup... -->
</c:if>
【讨论】:
【参考方案2】:您正在寻找fn:length(services)
。记得定义 fn 命名空间。
http://download.oracle.com/javaee/5/tutorial/doc/bnalg.html
【讨论】:
这是正确的答案,但这不是我真正希望得到的答案。多么痛苦。为什么我们不能用 Groovy 或 Rhino 而不是 EL... JSP 就是这样。我强烈建议升级到 JSF 和 facelets。 Here's 一篇关于同一问题的精彩博文(得出相同的解决方案)。我同意 JSP/EL 很烂,可以推荐升级到 Wicket。 ;-) @Jonik,与 Wicket 相比,JSF 的主要优势在于它是标准 Java EE 6 的一部分。这对您来说可能很重要,也可能不重要。 @DrewWills 似乎 EL(你的表达式所用的语言)支持 Java EE 6 版本中的方法调用。这是一个选项吗?以上是关于在 JSP/JSTL/EL 中访问集合的大小 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 JavaScript 中访问 Java / Servlet / JSP / JSTL / EL 变量