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
属性,您可以使用它来确定行的索引( varStatus
variables上的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>