尝试使用这个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>
答案 0 :(得分:155)
<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 ? ',' : ''}
答案 1 :(得分:3)
我从未喜欢JSTL的一件事(实际上我认为是唯一的:) :)事实是无法检索列表/集合的大小。
编辑:好的,所以有可能但我不知道:( see here。
forEach
标记具有varStatus
属性,可用于确定index
变量上行(count
/ varStatus
属性的索引)但你必须测试你是否在列表中的最后位置,这意味着事先有列表大小:
<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>
如果您经常使用这种代码,也可以这样做(否则您可以将其添加到范围内,方便您使用)。
答案 2 :(得分:3)
将它放在页面顶部以允许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>