Cara mendapatkan nilai indeks dari foreach loop di jstl

107

Saya memiliki nilai yang ditetapkan pada requestobjek seperti berikut,

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

dan ini adalah cara saya mengulang di halaman jsp

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

Bagaimana cara mendapatkan indeks dari setiap elemen dan meneruskannya ke fungsi JavaScript onclick="getCategoryIndex()".

Pertanyaan Java
sumber

Jawaban:

235

gunakan varStatus untuk mendapatkan indeks c: forEach varStatus properti

<c:forEach var="categoryName" items="${categoriesList}" varStatus="loop">
    <li><a onclick="getCategoryIndex(${loop.index})" href="#">${categoryName}</a></li>
</c:forEach>
pengguna baru
sumber
Saya mendapatkan Uncaught ReferenceError: loop ini tidak ditentukan `dan +1 untuk usaha Anda
Pertanyaan Java
onClick dari elemen yang ditampilkan
Pertanyaan Java
Karena nilai varStatus berisi nilai hingga iterasi pengulangan. Setelah itu, nilainya tidak valid. jadi hanya Anda yang mendapat pengecualian. Untuk yang tujuan Anda butuhkan indeks
newuser
Saya perlu mengetahui indeks [lokasi] setiap elemen yang ada di String Array.
Pertanyaan Jawa
ini berfungsi :) jika saya melakukan cara ini onclick = "getCategoryIndex ($ {loop.index})" ... terima kasih atas bantuannya
Pertanyaan Java
19

Saya menghadapi masalah serupa sekarang saya mengerti kita memiliki beberapa opsi lagi: varStatus = "loop", Di sini akan menjadi variabel loop yang akan menahan indeks lop.

Dapat digunakan untuk membaca indeks dasar Zeor atau 1 indeks dasar.

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

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

Sebagai contoh :

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

Untuk Info lebih lanjut, silakan lihat tautan ini

Laxman G
sumber
11

Anda dapat menggunakan varStatusatribut seperti ini: -

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

myIndex.index akan memberi Anda indeks. Berikut myIndexadalah objek LoopTagStatus .

Karenanya, Anda dapat mengirimkannya ke metode javascript Anda seperti ini: -

<a onclick="getCategoryIndex(${myIndex.index})" href="#">${categoryName}</a>
SudoRahul
sumber
Saya mendapatkan ini Uncaught ReferenceError: myIndex is not defined dan +1 atas usaha Anda
Pertanyaan Jawa
0
<a onclick="getCategoryIndex(${myIndex.index})" href="#">${categoryName}</a>

baris di atas memberi saya kesalahan. Jadi saya menulis di bawah ini yang bekerja dengan baik untuk saya.

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

Mungkin orang lain mungkin mendapatkan kesalahan yang sama. Lihat orang-orang ini!

Rakesh Kumar
sumber
0

Ini bekerja untuk saya:

<c:forEach var="i" begin="1970" end="2000">
    <option value="${2000-(i-1970)}">${2000-(i-1970)} 
     </option>
</c:forEach>
Pradeep
sumber