попытка использовать этот 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 вместо
:
${!loop.last ? ',' : ''}
by Проверка размера коллекции с помощью JSTL ответом было использование тега functions
поместите это в верхней части страницы, чтобы разрешить пространство имен 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>
Одна вещь, которая мне никогда не нравилась в JSTL (на самом деле я думаю, единственное, что :)), это тот факт, что нет способа получить размер списка/коллекции.
EDIT: Хорошо, так что это было возможно, но я не знал об этом :( см. здесь.
Тег 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>
Вы можете сделать то же самое, если у вас часто есть такой код (в противном случае вы можете просто добавить его в область действия с тем, что вам удобно).