Jstl'de foreach döngüsünden bir dizin değeri nasıl alınır


107

requestNesnede aşağıdaki gibi bir değer setim var ,

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

ve jsp sayfasında bu şekilde yineliyorum

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

Her öğenin dizinini nasıl alırım ve bunu JavaScript işlevine geçiririm onclick="getCategoryIndex()".

Yanıtlar:


235

kullanmak varStatus endeksi almak için c: forEach varStatus özelliklerini

<c:forEach var="categoryName" items="${categoriesList}" varStatus="loop">
    <li><a onclick="getCategoryIndex(${loop.index})" href="#">${categoryName}</a></li>
</c:forEach>

Bu Uncaught ReferenceError: döngü, çabanız için tanımlanmadı ve +1 alıyorum
— Java Soruları

Görüntülenen öğenin onClick
— Java Soruları

VarStatus değeri döngü yinelemesine kadar değer içerdiğinden. Bundan sonra değer geçerli değil. yani sadece sen istisnaya sahipsin. Hangi amaçla dizine ihtiyacınız var
— newuser

String Array'de her elemanın indeksinin [location] olduğunu bilmem gerekiyor.
— Java Soruları

işe yarıyor :) eğer bu şekilde yaparsam onclick = "getCategoryIndex ($ {loop.index})" ... yardım için teşekkürler
— Java Soruları

19

Şimdi benzer bir problemle karşılaşıyorum Anladığım kadarıyla daha fazla seçeneğimiz var: varStatus = "loop", Burada lop'un indeksini tutacak olan döngü değişkeni olacak.

Zeor temel dizini veya 1 bir temel dizini okumak için kullanmak için kullanılabilir.

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

${loop.index} it will give 0 base index as normal Index of array 0'dan başlayın.

Örneğin :

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

Daha fazla bilgi için lütfen bu bağlantıya bakın


11

varStatusÖzniteliği şu şekilde kullanabilirsiniz : -

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

myIndex.index size dizini verecektir. İşte myIndexbir LoopTagStatus nesnesi.

Dolayısıyla, bunu javascript yönteminize şu şekilde gönderebilirsiniz: -

<a onclick="getCategoryIndex(${myIndex.index})" href="#">${categoryName}</a>

Bunu anlıyorum Uncaught ReferenceError: myIndex is not defined ve çabanız için +1
— Java Soruları

0
<a onclick="getCategoryIndex(${myIndex.index})" href="#">${categoryName}</a>

Yukarıdaki satır bana bir hata veriyordu. Bu yüzden, benim için iyi çalışan aşağıdaki şekilde yazdım.

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

Belki bir başkası aynı hatayı alabilir. Şu adamlara bakın!


0

Bu benim için çalışıyor:

<c:forEach var="i" begin="1970" end="2000">
    <option value="${2000-(i-1970)}">${2000-(i-1970)} 
     </option>
</c:forEach>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.