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

Java-Fragen
quelle

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>
neuer Benutzer
quelle
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

Laxman G.
quelle
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>
SudoRahul
quelle
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!

Rakesh Kumar
quelle
0

Das funktioniert bei mir:

<c:forEach var="i" begin="1970" end="2000">
    <option value="${2000-(i-1970)}">${2000-(i-1970)} 
     </option>
</c:forEach>
Pradeep
quelle