So erhalten Sie einen Indexwert aus der foreach-Schleife in jstl


106

Ich habe einen Wert im requestObjekt wie folgt eingestellt:

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

und so iteriere ich in jsp Seite

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

Wie erhalte ich den Index jedes Elements und übergebe ihn an die JavaScript-Funktion onclick="getCategoryIndex()".

Antworten:


233

Verwenden Sie varStatus , um den Index c: forEach varStatus-Eigenschaften abzurufen

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

Ich bekomme diese Uncaught ReferenceError: Schleife nicht definiert `und +1 für Ihre Bemühungen
Java Questions

onKlicken Sie auf das angezeigte Element
Java Questions

Weil der varStatus-Wert einen Wert bis zur Schleifeniteration enthält. Danach ist der Wert nicht mehr gültig. Also hast nur du die Ausnahme. Für welchen Zweck benötigen Sie den Index
Newuser

Ich muss wissen, dass der Index [Speicherort] jedes Elements im String-Array enthalten ist.
Java-Fragen

es funktioniert :) wenn ich das so mache onclick = "getCategoryIndex ($ {loop.index})" ... danke für die Hilfe
Java Questions

18

Ich stehe vor einem ähnlichen Problem, jetzt verstehe ich, dass wir eine weitere Option haben: varStatus = "loop", Hier wird die Schleife eine Variable sein, die den Index von lop enthält.

Es kann zum Lesen des Zeor-Basisindex oder eines Basisindex verwendet werden.

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

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

Zum Beispiel :

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

Weitere Informationen finden Sie unter diesem Link


11

Sie können das varStatusAttribut folgendermaßen verwenden: -

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

myIndex.index gibt Ihnen den Index. Hier myIndexist ein LoopTagStatus- Objekt.

Daher können Sie dies wie folgt an Ihre Javascript-Methode senden: -

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

Ich bekomme dies Uncaught ReferenceError: myIndex is not defined und +1 für Ihre Bemühungen
Java-Fragen

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

Die obige Zeile gab mir einen Fehler. Also habe ich unten aufgeschrieben, was für mich gut funktioniert.

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

Vielleicht bekommt jemand anderes den gleichen Fehler. Schau dir diese Jungs an!


0

Das funktioniert bei mir:

<c:forEach var="i" begin="1970" end="2000">
    <option value="${2000-(i-1970)}">${2000-(i-1970)} 
     </option>
</c:forEach>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.