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.