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()".

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>

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


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>

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!


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