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" >

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

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


4

Możesz tego spróbować. podobny wynik

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

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}


@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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.