Використовуйте JSTL для varStatus циклу для кожного циклу як ідентифікатор


104

Я хочу використовувати підрахунок з циклу JSTL forEach, але мій код, здається, не працює.

<c:forEach items="${loopableObject}" var="theObject" varStatus="theCount">
    <div id="divIDNo${theCount}">
    </div>
</c:forEach>

виробляє

<div id="divIDNojavax.servlet.jsp.jstl.core.LoopTagSupport$1Status@5570e2" >

9
Ось клас 'javadoc: download.oracle.com/javaee/6/api/javax/servlet/jsp/jstl/core/… Подивіться, які методи getter він пропонує. Так, серед інших є getIndex():)
BalusC

Відповіді:


259

Змінна, яку задає, varStatus- це LoopTagStatusоб'єкт, а не int. Використання:

<div id="divIDNo${theCount.index}">

Для уточнення:

  • ${theCount.index} починає рахувати в 0 якщо ви не встановили beginатрибут
  • ${theCount.count} починає рахувати в 1

21
${theCount.count} завжди починається з 1. ${theCount.index}починається з того, що ви встановили beginатрибут. наприклад<c:forEach var="foo" items="${bar}" begin="5" varStatus="theCount">
vegemite4me

8

ви б скористалися будь-яким із цих:

JSTL c: для всіх властивостей varStatus

Опис власника

  • current getCurrent () Елемент (з колекції) для поточного раунду ітерації.

  • index getIndex () Нульовий індекс для поточного раунду ітерації.

  • count getCount () Одноразовий підрахунок для поточного раунду ітерації

  • Перший - прапор First (), який вказує, чи є поточний раунд першим проходженням через ітерацію
  • last isLast () Прапор, який вказує, чи є поточний раунд останнім проходженням через ітерацію

  • begin getBegin () Значення атрибуту start

  • end getEnd () Значення кінцевого атрибута

  • step getStep () Значення атрибуту step


4

Ви можете спробувати це. подібний результат

 <c:forEach items="${loopableObject}" var="theObject" varStatus="theCount">
    <div id="divIDNo${theCount.count}"></div>
 </c:forEach>

1

Це дійсно допомогло мені динамічно генерувати ідентифікатори showDetailItemдля наведеного нижче коду.

<af:forEach id="fe1" items="#{viewScope.bean.tranTypeList}" var="ttf" varStatus="ttfVs" > 
<af:showDetailItem  id ="divIDNo${ttfVs.count}" text="#{ttf.trandef}"......>

якщо ви виконуєте цей рядок, <af:outputText value="#{ttfVs}"/>друкується нижче:

{index = 3, count = 4, last = false, first = false, end = 8, step = 1, begin = 0}


@HenryKeiter є справжня відповідь тут. Неправильне форматування просто приховало все html, поки я його не виправив.
Dan Dan Fiddling Firelight

Це дає абсолютно таку ж відповідь, що була надана 3 роками раніше (використання varStatus.count), лише набагато менш читабельна. Навіщо турбуватися читати відповіді інших людей? ;)
іржа
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.