Inkrementzähler mit Schleife

Lesezeit: 5 Minuten

Benutzer-Avatar
London

Diese Frage bezieht sich auf meine vorherige Frage:

Jsp iteriert durch die Objektliste

Ich möchte einen Zähler einfügen, der bei 0 in meine for-Schleife beginnt. Ich habe bisher mehrere Kombinationen ausprobiert:

1.

<c:forEach var="tableEntity" items="${requestScope.tables}">
   <c:forEach var="rowEntity" items="${tableEntity.rows}" varStatus="count">            
        <c:out value="${count}" />
    </c:forEach>
</c:forEach>

2.

<c:set var="count" value="0" scope="page" />
<c:forEach var="tableEntity" items="${requestScope.tables}">
   <c:forEach var="rowEntity" items="${tableEntity.rows}">      
   <%=count++%>  
<c:out value="${count}" />
    </c:forEach>
</c:forEach>

Das Problem beim ersten Ansatz ist, dass die äußere Schleife 3 Elemente und die innere Schleife 7 Elemente hat, sodass die Zählung für jedes äußere Element bei 0 beginnt. Beim zweiten bekomme ich einen Kompilierungsfehler. Hier ist im Grunde, was ich will:

counter = 0;
outer for loop 
    inner for loop 
       counter++;
       //cout/echo/print counter value should start from 0
    end inner loop
end outer loop

Ich bin nur nicht ganz vertraut mit der Syntax. Danke

  • Welchen Compiler-Fehler erhalten Sie?

    – Peter Török

    1. Februar 2011 um 12:42 Uhr

  • TU es nicht. Es ist schwer zu schreiben und immer schwerer zu lesen. Erstellen Sie einfach eine Bean und verwenden Sie sie. Falls Sie es wirklich brauchen: Wie wäre es mit einem Zähler pro Schleife und einer Kombination wie outer*tableEntity.rows.size + inner?

    – maaartinus

    1. Februar 2011 um 12:46 Uhr

  • @maaartinus kannst du ein Beispiel geben?

    – London

    1. Februar 2011 um 13:04 Uhr

  • Ich kann es jetzt nicht finden, aber es ist einfach: Wenn die JSP zu kompliziert wird, erstellen Sie eine Bean (eine Klasse mit Standardkonstruktor und allen einstellbaren Feldern), implementieren Sie die erforderliche Funktionalität in Java anstelle dieser Chevronitis, setzen Sie die Felder für die berechnen und das Ergebnis erhalten. Hier ist die JSP-Lösung einfacher als ich dachte, aber fügen Sie im Allgemeinen keine komplexen Berechnungen in JSP ein.

    – maaartinus

    1. Februar 2011 um 15:08 Uhr

Versuche Folgendes:

<c:set var="count" value="0" scope="page" />

//in your loops
<c:set var="count" value="${count + 1}" scope="page"/>

  • das ist genau das, wonach ich gesucht habe tnx

    – London

    1. Februar 2011 um 13:34 Uhr

  • Siehe die Antwort von BalusC für eine viel sauberere Lösung. dh verwenden Sie varStatus

    – matte Verbrennungen

    1. Mai 2012 um 15:11 Uhr

  • Ich weiß nicht … dieser sieht tatsächlich viel sauberer und angenehmer für die Augen aus

    – Henley

    4. Juni 2012 um 17:06 Uhr

  • Das ist großartig Danke! Meine Implementierung erforderte jedoch, dass es sich um einen Sitzungsbereich handelte, damit es funktionierte, Prost!

    – Jonathan Laliberte

    25. Juli 2017 um 14:36 ​​Uhr

  • wie kann ich zuordnen count zu einer JavaScript-Variablen?

    – Ammar Samater

    13. Oktober 2017 um 7:55 Uhr


Benutzer-Avatar
BalusC

Das varStatus Referenzen zu LoopTagStatus das hat ein getIndex() Methode.

So:

<c:forEach var="tableEntity" items="${requestScope.tables}" varStatus="outer">
   <c:forEach var="rowEntity" items="${tableEntity.rows}" varStatus="inner">            
        <c:out value="${(outer.index * fn:length(tableEntity.rows)) + inner.index}" />
    </c:forEach>
</c:forEach>

Siehe auch:

  • @BalusC Ihr Code scheint interessant zu sein, aber ich verstehe nicht wirklich, was er tut, aber er liefert nicht das richtige Ergebnis. Vielen Dank für Ihre Zeit und Mühe.

    – London

    1. Februar 2011 um 13:32 Uhr

  • @BalusC ja, ich habe diesen benutzt. Die äußere Schleife hat 3 Elemente, die erste innere Schleife hat 7 Elemente, die zweite innere Schleife hat 10 Elemente und die dritte innere Schleife hat 3 Elemente. Insgesamt sollte der Zähler also von 0 bis 19 zählen. Ihr Code erzeugt jedoch das folgende Ergebnis: 0 1 2 3 4 5 6 10 11 12 13 14 15 16 17 18 19 6 7 8 . Vielleicht habe ich meine Frage nicht richtig erklärt … aber das ist nicht das, was ich erreichen wollte. Und ich glaube nicht, dass dein Fehler dumm war, weil das alles für mich (vorerst) gleich aussieht, aber das wird sich ändern.

    – London

    1. Februar 2011 um 13:47 Uhr

  • In Ihrer ursprünglichen Frage hatten Sie 2 Schleifen. Die Antwort war darauf ausgerichtet. Wenn Sie mehr verschachtelte Schleifen haben, müssen Sie sie alle in der Berechnung berücksichtigen, und dann ist die Antwort von Dogbane in der Tat weniger komplex (jedoch die scope="page" ist überflüssig, wenn Sie keine haben count -Attribut in anderen Bereichen, Sie könnten es dann sicher entfernen).

    – BalusC

    1. Februar 2011 um 13:49 Uhr


  • @BalusC ja, das wusste ich nicht, ich brauche keine Scope-Seite. Vielen Dank, können Sie einige nützliche Ressourcen für JSP empfehlen? Ich habe einen Programmierhintergrund, aber dies ist mein Einstieg in springmvc/jsp.

    – London

    1. Februar 2011 um 14:03 Uhr

  • Beginnen Sie auf unserer JSP-Infoseite, auf die Sie auch zugreifen können, indem Sie mit der Maus darüber fahren [jsp] markieren und klicken info Link oder durch Anklicken about the jsp tag Link, wenn nach dem Klicken alle Fragen mit demselben Tag konfrontiert werden [jsp] Schild.

    – BalusC

    1. Februar 2011 um 14:16 Uhr


Sie können varStatus in Ihrer c:forEach-Schleife verwenden

In Ihrem ersten Beispiel können Sie den Zähler wie folgt zum Laufen bringen …

<c:forEach var="tableEntity" items="${requestScope.tables}">
   <c:forEach var="rowEntity" items="${tableEntity.rows}" varStatus="count">            
        my count is ${count.count}
    </c:forEach>
</c:forEach>

Was mich zu dieser Seite geführt hat, ist, dass ich innerhalb einer Seite festgelegt habe, dann innerhalb einer enthaltenen Seite, in der ich das Inkrement durchgeführt habe

und hier ist das problem

Um ein solches Problem zu lösen, verwenden Sie einfach scope="request" wenn Sie die Variable oder das Inkrement deklarieren

//when you set the variale add scope="request"
<c:set var="nFilters" value="${0}" scope="request"/>
//the increment, it can be happened inside an included page
<c:set var="nFilters" value="${nFilters + 1}"  scope="request" />

Ich hoffe, das spart Ihre Zeit

1155300cookie-checkInkrementzähler mit Schleife

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy