我在一些JSP页面中大量使用ArrayList。我想像这样访问一个ArrayList:
${myArrayList.size}
但是,由于对象必须符合JavaBean标准,而JSP / JSTL中的myArrayList.getMyPropertyName()
为${myArrayList.myPropertyName}
,因此无法访问myArrayList.size()
函数。
我应该使用另一个课吗?
更新
有点难以接受一个功能,例如在JSP中获取ArrayList的大小只是为了更清晰的一个衬里,但似乎设计师选择.size()
而不是{{ 1}}
如果您支持.getSize()
或${fn:length(myArrayList)}
语法,我想这确实不是问题。
答案 0 :(得分:11)
标题说明了一切:为什么ArrayList没有getSize()而不是size()?
如“Java Collections API Design FAQ”中所述:
为什么不使用“豆式名称”来保持一致性?
虽然新集合方法的名称不符合 “Beans命名惯例”,我们相信它们是 合理,一致和适合其目的。这应该 要记住,Beans命名约定不适用于 JDK作为一个整体; AWT确实采用了这些惯例,但那样 决定有点争议。我们怀疑 集合API将非常普遍地使用,通常使用 多行方法调用单行代码,因此非常重要 名字很短。例如,考虑迭代器 方法。目前,集合上的循环如下所示:
for (Iterator i = c.iterator(); i.hasNext(); ) System.out.println(i.next());即使Collection名称是一行,所有东西都整齐地放在一行上 一个长长的表达。如果我们将方法命名为“getIterator”, “hasNextElement”和“getNextElement”,这将不再是 案件。因此,我们采用了“传统的”JDK风格而不是 豆类风格。
答案 1 :(得分:5)
您使用fn:length
JSTL函数(请参阅docs)。
首先,在JSP的顶部声明fn
命名空间:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
然后:
${fn:length(myArrayList)}
答案 2 :(得分:1)
最新版本的EL支持方法调用${collection.size()}
其他两个答案为您提供更多详细信息
${fn:length(collection)}
顺便说一句,在JSP中,您通常不需要集合的size()
- 您只需迭代它。如果必须执行一些计算,请考虑在servlet / controller中执行此操作。当然,我同意,有时在jsp本身使用它是有效的。