ChatGPT解决这个技术问题 Extra ChatGPT

使用 JSTL 检查集合大小

如何使用 JSTL 检查集合的大小?

就像是:

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

</c:if>

M
Martlark
<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() 函数。从 the documentation

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>

只是想注意,如果需要获取大小是为了确定集合是否为非空,那么“空”运算符很有用,因为它还检查空值。
我同意马克的观点。为什么要为一个标签将更多杂物导入您的页面?使用马克的解决方案,它更清洁。
同意 - 空的更干净。 @Joel 应该作为完整答案发布,以便可以投票和接受。我们这里的很多人(我)都是非 jsp 程序员,他们从 Google 和 SO 复制/粘贴片段,除了我们看到的第一段代码之外没有太多思考。
OP询问了检查大小,不一定是检查它是否为空,我的回答还允许使用可用的完整标签库来考虑更复杂的场景。
谢了哥们。这真的很有帮助,因为我只想在大小超过一个时才显示列表。
J
Josh

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

${empty companies}

这将检查 null 和空列表/集合/数组。它不会让你得到长度,但它满足 OP 中的示例。如果您能侥幸成功,这将比导入标签库及其像 gt 这样的硬语法更干净。


B
Brad Larson

你可以这样使用

${fn:length(numList)}

S
Supun Dharmarathne

使用 ${fn:length(companies) > 0} 检查大小。这将返回一个布尔值