在 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 变量

在 JavaScript 中访问 Java / Servlet / JSP / JSTL / EL 变量

分页功能的实现——Jdbc && JSP

CF348C Subset Sums

手写ArrayList集合框架

MongoDB更改oplog的大小