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.