Использовать varStatus цикла JSTL forEach в качестве идентификатора

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" >
Марк W
источник
9
Вот javadoc класса: download.oracle.com/javaee/6/api/javax/servlet/jsp/jstl/core/… Посмотрите, какие методы получения он предлагает. Да, среди прочего есть getIndex():)
BalusC 06

Ответы:

259

Установленная переменная varStatus- это LoopTagStatusобъект, а не int. Использование:

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

Чтобы уточнить:

  • ${theCount.index}начинает отсчет, 0если вы не установили beginатрибут
  • ${theCount.count} начинает считать в 1
с высоким содержанием кофеина
источник
21
${theCount.count} всегда начинается с 1. ${theCount.index}начинается с того, что вы установили для beginатрибута. eg<c:forEach var="foo" items="${bar}" begin="5" varStatus="theCount">
vegemite4me
8

вы бы использовали любой из них:

JSTL c: для каждого свойства varStatus

Описание получения свойства

  • current getCurrent () Элемент (из коллекции) для текущего раунда итерации.

  • index getIndex () Отсчитываемый от нуля индекс для текущего раунда итерации.

  • count getCount () Отсчет от единицы для текущего раунда итерации

  • first isFirst () Флаг, указывающий, является ли текущий раунд первым проходом через итерацию
  • last isLast () Флаг, указывающий, является ли текущий раунд последним проходом через итерацию

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

  • end getEnd () Значение атрибута end

  • 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 Is Fiddling By Firelight
Это дает тот же ответ, что и 3 года назад (использование varStatus.count), только гораздо менее читаемый. Зачем читать ответы других людей? ;)
rustyx