试图使用这个 jstl 来制定一个 json 字符串,我怎样才能使该段不在最后一条记录的末尾放置逗号?注意最后的逗号
<c:forEach items="${fileList}" var="current">
{ id:1001,data:["<c:out value="${current.fileName}" />" , "<c:out value="${current.path}" />" , "<c:out value="${current.size}" />" , "<c:out value="${current.type}" />"] },
</c:forEach>
只需使用 LoopTagStatus#isLast()
。
<c:forEach items="${fileList}" var="current" varStatus="loop">
{ id: 1001,
data: [
"<c:out value="${current.fileName}" />",
"<c:out value="${current.path}" />",
"<c:out value="${current.size}" />",
"<c:out value="${current.type}" />"
]
}<c:if test="${!loop.last}">,</c:if>
</c:forEach>
您还可以在 EL 中使用条件运算符代替 <c:if>
:
${!loop.last ? ',' : ''}
我从不喜欢 JSTL 的一件事(实际上我认为是唯一的 :))是没有办法检索列表/集合的大小。
编辑: 好的,所以这是可能的,但我不知道 :( see here.
forEach
标记具有 varStatus
属性,可用于确定行的索引(varStatus
变量的 index
/count
属性),但您必须测试您是否位于最后一个位置在列表中,这意味着事先拥有列表大小:
<c:forEach items="${fileList}" var="current" varStatus="status">
...
<c:if test="${not (status.count eq listSize)}">,</c:if>
</c:forEach>
但在执行此类操作之前,您必须手动将 listSize
置于范围内。
我在我的一个项目中所做的是为自己创建一个标签,该标签接受一个集合并返回值:
<myLib:collectionSize collection="${fileList}" var="listSize" />
<c:forEach items="${fileList}" var="current" varStatus="status">
...
<c:if test="${not (status.count eq listSize)}">,</c:if>
</c:forEach>
如果你经常有这种代码,你可以做同样的事情(否则你可以用你方便的任何东西将它添加到范围内)。
Check a collection size with JSTL 的答案是使用函数标签
将其放在页面顶部以允许 fn 命名空间
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
并在你的jsp页面中这样使用
<p>The length of the companies collection is : ${fn:length(companies)}</p>
不定期副业成功案例分享