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.