Jak uzyskać wartość indeksu z pętli foreach w jstl

107

Mam wartość ustawioną w requestobiekcie, jak poniżej,

String[] categoriesList=null;
categoriesList = engine.getCategoryNamesArray();
request.setAttribute("categoriesList", categoriesList );

i tak właśnie iteruję na stronie jsp

<% if(request.getAttribute("categoriesList") != null) { %>
<c:forEach var="categoryName" items="${categoriesList}">
   <li><a onclick="getCategoryIndex()" href="#">${categoryName}</a></li>
</c:forEach>
<% }%>

Jak uzyskać indeks każdego elementu i przekazać go do funkcji JavaScript onclick="getCategoryIndex()".

Pytania dotyczące języka Java
źródło

Odpowiedzi:

235

użyj varStatus, aby uzyskać indeks c: forEach właściwości varStatus

<c:forEach var="categoryName" items="${categoriesList}" varStatus="loop">
    <li><a onclick="getCategoryIndex(${loop.index})" href="#">${categoryName}</a></li>
</c:forEach>
nowy użytkownik
źródło
Widzę, że ta Uncaught ReferenceError: pętla nie jest zdefiniowana `i +1 za twój wysiłek
pytania dotyczące języka Java,
onClick wyświetlonego elementu
pytania dotyczące języka Java,
Ponieważ wartość varStatus zawiera wartość aż do iteracji pętli. Po tym wartość nie jest poprawna. więc tylko Ty masz wyjątek. Do tego potrzebny jest indeks
newuser
Muszę wiedzieć, że indeks [lokalizacja] każdego elementu znajduje się w tablicy ciągów.
Pytania dotyczące języka Java,
to działa :) jeśli zrobię to w ten sposób onclick = "getCategoryIndex ($ {loop.index})" ... dzięki za pomoc
pytania dotyczące języka Java
19

Mam teraz podobny problem Rozumiem, że mamy więcej opcji: varStatus = "pętla", Tutaj będzie zmienna pętla, która będzie przechowywać indeks lop.

Może być używany do odczytu indeksu podstawowego Zeor lub 1 indeksu podstawowego.

${loop.count}` it will give 1 starting base index.

${loop.index} it will give 0 base index as normal Index of array zacznij od 0.

Na przykład :

<c:forEach var="currentImage" items="${cityBannerImages}" varStatus="loop">
<picture>
   <source srcset="${currentImage}" media="(min-width: 1000px)"></source>
   <source srcset="${cityMobileImages[loop.count]}" media="(min-width:600px)"></source>
   <img srcset="${cityMobileImages[loop.count]}" alt=""></img>
</picture>
</c:forEach>

Aby uzyskać więcej informacji, skorzystaj z tego linku

Laxman G
źródło
11

Możesz użyć tego varStatusatrybutu w następujący sposób: -

<c:forEach var="categoryName" items="${categoriesList}" varStatus="myIndex">

myIndex.index da ci indeks. Tutaj myIndexjest LoopTagStatus przedmiot.

Dlatego możesz wysłać to do swojej metody javascript w następujący sposób: -

<a onclick="getCategoryIndex(${myIndex.index})" href="#">${categoryName}</a>
SudoRahul
źródło
Dostaję to Uncaught ReferenceError: myIndex is not defined i +1 za twój wysiłek
pytania dotyczące języka Java
0
<a onclick="getCategoryIndex(${myIndex.index})" href="#">${categoryName}</a>

powyższa linia dawała mi błąd. Zapisałem więc poniżej sposób, który dla mnie działa dobrze.

<a onclick="getCategoryIndex('<c:out value="${myIndex.index}"/>')" href="#">${categoryName}</a>

Może ktoś inny może dostać ten sam błąd. Spójrz na tych facetów!

Rakesh Kumar
źródło
0

To działa dla mnie:

<c:forEach var="i" begin="1970" end="2000">
    <option value="${2000-(i-1970)}">${2000-(i-1970)} 
     </option>
</c:forEach>
Pradeep
źródło