Użyj zmiennej JSTL pętli forEach jako identyfikatora

104

Chcę użyć liczby z pętli JSTL forEach, ale mój kod nie działa.

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

produkuje

<div id="divIDNojavax.servlet.jsp.jstl.core.LoopTagSupport$1Status@5570e2" >
Mark W.
źródło
9
Oto klasa javadoc: download.oracle.com/javaee/6/api/javax/servlet/jsp/jstl/core/… Zobacz, jakie metody pobierające oferuje. Tak, między innymi jest getIndex():)
BalusC

Odpowiedzi:

259

Zmienna ustawiona przez varStatusjest LoopTagStatusobiektem, a nie int. Posługiwać się:

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

W celu wyjaśnienia:

  • ${theCount.index}zaczyna liczyć od, 0chyba że ustawiłeś beginatrybut
  • ${theCount.count} zaczyna liczyć od 1
bogata w kofeinę
źródło
21
${theCount.count} zawsze zaczyna się od 1. ${theCount.index}zaczyna się od tego, na co ustawiłeś beginatrybut. np.<c:forEach var="foo" items="${bar}" begin="5" varStatus="theCount">
vegemite4me
8

użyłbyś dowolnego z tych:

JSTL c: właściwości forEach varStatus

Opis pobierania właściwości

  • current getCurrent () Element (z kolekcji) dla bieżącej rundy iteracji.

  • index getIndex () Indeks liczony od zera dla bieżącej rundy iteracji.

  • count getCount () Licznik (liczony od jedności) dla bieżącej rundy iteracji

  • first isFirst () Flaga wskazująca, czy bieżąca runda jest pierwszym przebiegiem iteracji
  • last isLast () Flaga wskazująca, czy bieżąca runda jest ostatnim przebiegiem iteracji

  • begin getBegin () Wartość atrybutu begin

  • end getEnd () Wartość atrybutu end

  • step getStep () Wartość atrybutu step

diego matos - keke
źródło
4

Możesz tego spróbować. podobny wynik

 <c:forEach items="${loopableObject}" var="theObject" varStatus="theCount">
    <div id="divIDNo${theCount.count}"></div>
 </c:forEach>
Nathanphan
źródło
1

To naprawdę pomogło mi w dynamicznym generowaniu identyfikatorów showDetailItemdla poniższego kodu.

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

jeśli wykonasz tę linię, <af:outputText value="#{ttfVs}"/>wyświetli się poniżej:

{indeks = 3, liczba = 4, ostatnia = fałsz, pierwsza = fałsz, koniec = 8, krok = 1, początek = 0}

jyoti pani
źródło
@HenryKeiter tutaj jest prawdziwa odpowiedź. Złe formatowanie spowodowało, że cały kod HTML był ukryty, dopóki go nie naprawiłem.
Dan Is Fiddling By Firelight
Daje to dokładnie tę samą odpowiedź, która została udzielona już 3 lata wcześniej (użyj varStatus.count), tylko znacznie mniej czytelną. Po co zawracać sobie głowę czytaniem odpowiedzi innych osób? ;)
rustyx