使用JSTL检查集合大小


Answers:


430
<c:if test="${companies.size() > 0}">

</c:if>

此语法仅在EL 2.2或更高版本(Servlet 3.0 / JSP 2.2或更高版本)中有效。如果由于使用JSPX或Facelets而不是JSP而遇到XML解析错误,请使用gt代替>

<c:if test="${companies.size() gt 0}">

</c:if>

如果您实际上遇到EL解析错误,则可能是您使用的EL版本太旧了。然后,您将需要JSTL fn:length()函数。从文档中

length(java.lang.Object) -返回集合中的项目数或字符串中的字符数。

将其放在JSP页面的顶部以允许fn名称空间:

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

或者,如果您使用的是JSPX或Facelets:

<... xmlns:fn="http://java.sun.com/jsp/jstl/functions">

并在您的页面中这样使用:

<p>The length of the companies collection is: ${fn:length(companies)}</p>

因此,要测试集合的长度:

<c:if test="${fn:length(companies) gt 0}">

</c:if>

另外,对于这种特定情况,您也可以简单地使用EL empty运算符:

<c:if test="${not empty companies}">

</c:if>

47
只是要注意,如果需要获取大小是为了确定集合是否为非空值,则“空”运算符非常有用,因为它还会检查null。
乔尔2010年

我同意马克在这里。为什么要为一个标签将更多的杂项导入您的页面?使用Mark的解决方案,它更清洁。
ResourceReaper

同意-空比较干净。@Joel应该发布为完整答案,以便可以投票并接受。我们中的许多人(非我)都是非jsp程序员,他们从Google和SO复制/粘贴代码段,而对我们看到的第一段代码没有过多的思考。
2014年

9
OP询问有关检查大小的问题,而不一定是有关检查其是否为空的问题,我的回答还允许使用完整的标签库来考虑更复杂的情况。
Martlark 2014年

公司必须是变量而不是参数,否则必须对其进行定义,例如对于ATG-<dsp:getvalueof var =“ companies” param =“ arrayParam” />
Andriy Boyko

30

正如@Joel和@Mark Chorley在先前的评论中所建议的:

${empty companies}

这将检查是否有空列表/集合/数组。它并不能满足您的需要,但是可以满足OP中的示例。如果您可以解决这个问题,那将比导入标记库及其类似的硬语法更干净gt



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.