jstl foreach省略最后一个logging中的元素

试图使用这个jstl来制定一个jsonstring,我怎样才能使该段不要把逗号放在最后一个logging的末尾? 注意最后的逗号

<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(实际上我认为是唯一的事情:)是事实上,没有办法检索列表/集合的大小。

编辑:好的,所以这是可能的,但我不知道它:( 看到这里 。

forEach标签具有varStatus属性,您可以使用它来确定行的索引( varStatusvariables上的index / count属性),但是您必须testing您是否位于列表中的最后一个位置,这意味着列表大小预先:

 <c:forEach items="${fileList}" var="current" varStatus="status"> ... <c:if test="${not (status.count eq listSize)}">,</c:if> </c:forEach> 

但是在做这样的事情之前,你必须手动将listSize放在范围内。

我在我的一个项目中做了什么就是创build一个标签,它需要一个集合并返回值:

  <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> 

如果你经常使用这种types的代码,你也可以做同样的事情(否则你可以直接将它添加到范围内)。

通过使用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>