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.