jstl foreach опускают элемент в последней записи

попытка использовать этот 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>
63
задан Doug Porter 19 September 2013 в 19:18
поделиться

3 ответа

Просто используйте 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 ? ',' : ''}
160
ответ дан 24 November 2019 в 16:10
поделиться

Одна вещь, которая мне никогда не нравилась в 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>

Вы можете сделать то же самое, если у вас часто есть такой код (в противном случае вы можете просто добавить его в область действия с тем, что вам удобно).

3
ответ дан 24 November 2019 в 16:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: