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

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>

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


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>

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!


0

Ini bekerja untuk saya:

<c:forEach var="i" begin="1970" end="2000">
    <option value="${2000-(i-1970)}">${2000-(i-1970)} 
     </option>
</c:forEach>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.