Kontinuierliche Nummerierung von Nested-Loop-Elementen in Thymeleaf

8

Ich schreibe eine Vorlage, die eine Liste von Mitarbeitern erstellen soll. Mitarbeiter werden an Thymeleaf in Form einer Liste von Abteilungen weitergeleitet, wo jede Abteilung ihre eigene Liste von Mitarbeitern hat.

Da es meine Aufgabe ist, sie alle anzuzeigen, besteht das Problem darin, die fortlaufende Nummerierung zu handhaben. Jeder Mitarbeiter sollte als Zeile mit der nächsten Nummer erscheinen.

Der folgende Versuch ermöglicht es, Mitarbeiter einer bestimmten Abteilung mit einer neuen Nummerierung pro Abteilung zu indizieren:

%Vor%

Aber mein Punkt ist, kontinuierliche Nummerierung durch alle Abteilungen zu halten, genau so:

%Vor%

Ich weiß, dass ich diese Struktur auf der Serverseite flach machen kann, aber ich kann nicht glauben, dass es der einzige Weg ist.

Ich habe auch versucht, lokale Variable mit th:with="idx = 0" einzuführen und sie dann irgendwo mit th:with="idx = ${idx} + 1 zu erhöhen, aber das überschreibt einfach den Wert von idx .

    
Maciej Dobrowolski 30.01.2015, 13:16
quelle

3 Antworten

3

Sie versuchen, eine lokale Variable zu aktualisieren und den neuen Wert in einem größeren Bereich sichtbar zu machen als dort, wo die Aktualisierung vorgenommen wurde. Deshalb widerspricht es dem: mit der Definition. Ich denke, Sie können es nicht vermeiden, einige serverseitige Optimierungen vorzunehmen, um zum Beispiel eine flachere Ansicht Ihrer Struktur zu bieten, wie Sie es vorgeschlagen haben.

Auf der anderen Seite, eine schnelle Lösung, (vorausgesetzt, Sie sind nicht streng auf die Verwendung einer Tabelle), könnte es versuchen, eine geordnete Liste mit th: Blöcke für die umschließende Abteilung:

%Vor%     
grid 09.03.2015, 00:02
quelle
1

Mal sehen, ob ich dein Problem verstehe:

Sie haben ein Modell, in dem Mitarbeiter Abteilungen zugeordnet sind. Gemäß Ihrer Beschreibung des Problems verfügt ein Abteilungsobjekt über eine Liste von Mitarbeitern, die ihm zugeordnet sind.

Nach dem, was ich gesehen habe, nehmen Sie von Ihrer Controller-Klasse zu Ihrer Vision eine Sammlung von Abteilungen.

Das Thymeleaf ermöglicht die Verwendung von Iteration in Elementen durch th: jedes Attribut, wie Sie bereits wissen. Sie können Ihren Code geringfügig reduzieren, indem Sie eine Iteration nur in der Sammlung von Mitarbeitern ausführen, beispielsweise:

%Vor%
  

HINWEIS : Wenn ich mich nicht irre, wird das Ergebnis Ihrer Vorlage das wiederholen   Tabellenelement aufgrund der Anzahl der Abteilungen.

Auf diese Weise wird Ihr Code sauberer und Sie können sich nur auf die Arbeit mit Mitarbeitern konzentrieren.

In Bezug auf die Hauptfrage nach der Definition eines Index für jede Zeile können Sie etwas verwenden, das als "Iterationsstatus" bekannt ist.

Ich glaube, Sie wissen bereits etwas darüber, aber ich werde versuchen, meinen Weg zu erklären, der Ihnen vielleicht etwas aufklären könnte:

Gemäß der Thymeleaf-Dokumentation können Sie eine von Thymeleaf bereitgestellte Variable verwenden, die Ihnen Zugriff auf einige Informationen über die durchgeführte Iteration gibt. Mit dieser Variable können Sie einige Informationen sammeln, deren Eigenschaften in der Thymeleaf-Dokumentation ( Überprüfen Sie die Sitzung 6.2): ​​

  

Der aktuelle Iterationsindex, beginnend mit 0. Dies ist der Index   Eigentum. Der aktuelle Iterationsindex, beginnend mit 1. Dies ist der    Anzahl Eigenschaft. Die Gesamtanzahl der Elemente in der iterierten Variablen.   Dies ist die Eigenschaft size . Die iter-Variable für jede Iteration. Dies   ist die aktuelle Eigenschaft. Ob die aktuelle Iteration gerade oder ungerade ist.   Dies sind die Booleschen Eigenschaften gerade / ungerade . Ob der Strom   Iteration ist die erste. Dies ist die erste Boolesche Eigenschaft.   Ob die aktuelle Iteration die letzte ist. Dies ist das letzte   Boolesche Eigenschaft.

Um auf diese Variable zugreifen zu können, müssen Sie sie bald nach der Deklaration des Elements deklarieren, die jede durchgeführte Iteration darstellt:

%Vor%

Sie können die Deklaration dieser Variablen auch weglassen und sie trotzdem verwenden. Dies ist nur möglich, weil das Thymeleaf diese Aussage an Sie macht, wo es den Namen verwendet, der der Variablen für jedes Iterationselement (in diesem Fall "Mitarbeiter") gegeben wird, und fügen Sie das Suffix "Stat" hinzu (resultierend auf "employeeStat") .

Sie haben Zugriff auf diese Variable und ihre internen Eigenschaften nur innerhalb des vom Tag definierten Codefragments mit th: jedem Attribut.

Wenn Sie wissen, wie Zeilen und Spalten auf Ihrer Webanwendungsseite angezeigt werden, müssen Sie nur die Eigenschaften der Iterationsstatusvariablen verwenden, z. B .:

%Vor%

Oder, wenn Sie bevorzugen:

%Vor%

Wenn Sie Fragen haben, kommentieren Sie bitte und ich werde meine Antwort zu einem besseren Verständnis bearbeiten.

BEARBEITEN

Oh, ich verstehe erst jetzt, was dein wirkliches Problem ist, sorry.

Wenn Sie eine Liste erstellen möchten, in der der Name jedes Angestellten angezeigt wird, gefolgt vom Namen der jeweiligen Abteilung, und jedes Listenelement mit einer anderen Nummer (alle ordiniert), dann ist das Problem ziemlich einfach.

>

Alles, was Sie zuerst tun müssen, ist, durch alle Abteilungen zu gehen und den Namen des Mitarbeiters gefolgt von dem Namen der Abteilung anzuzeigen, wie Sie es wünschen. Dies wird einen Teil des Problems lösen, da dies nur eine einfache Frage der Logik und der Verwendung der Iteration ist.

Um dies regelmäßig geschehen zu lassen, dh mit jedem Datensatz / Element in der Reihenfolge aufgelistet, können Sie zum Beispiel eine lokale Variable, eine der anderen Ressourcen in Thymeleaf erstellen.

Um schnell zu erfahren, wie Sie diesen Ressourcentyp festlegen und verwenden, klicken Sie auf diesen Link: einen Wert für einen Variablennamen in thymeleaf einrichten

Oder Sie können die Dokumentation von Thymeleaf (Sitzung 9) überprüfen: Ссылка

Versuchen Sie nach dem Erstellen Ihrer Variablen, sie als Zähler zu verwenden, wo sie für jeden aufgelisteten Datensatz erhöht wird.

Ich hoffe, das ist hilfreich und löst Ihr Problem. Wenn das nicht funktioniert, bitte nochmals kommentieren und ich werde eine andere Lösung versuchen. Ebenso, wenn das nicht wirklich Ihre Frage ist, kommentieren Sie bitte auch.

  

HINWEIS : Ich bitte Sie erneut, in Ihrer Schleifenstruktur vorsichtig zu sein. Du magst es sein   Erstellen einer sich wiederholenden Struktur, die mehrere Tabellenstrukturen erstellt   im HTML-Code, was ich glaube nicht was du willst.Stellen Sie außerdem sicher, dass Sie überprüfen, ob Sie arithmetische Operationen korrekt ausführen. Ich glaube, dass Ihre Inkrementierungsoperation innerhalb der geschweiften Klammern {} sein muss und nicht aus ihnen.

BEARBEITEN 2

Ich habe überall gesucht, um das zu tun ... Aber leider konnte ich nur das finden:

Zähler in Schleifen in Thymeleaf

Mehr dazu finden Sie in der Thymeleaf-Dokumentation (Anhang B - Zahlen). Dies ist eine gültige Methode, um eine Schleife mit Thymeleaf zu machen. Es ist jedoch schwierig, eine verschachtelte Schleife zu erstellen, da wir in Thymeleaf mit Attributen und nicht mit Tags / HTML-Elementen arbeiten. Für den Fall, dass Sie eine neue Zeile nur innerhalb einer verschachtelten Schleife erstellen würden, was nicht möglich ist. Vielleicht können Sie versuchen, das Attribut "th: each" zweimal im selben "tr" -Tag zu verwenden, beispielsweise:

%Vor%

Obwohl ich glaube, dass das nicht funktionieren wird ...

Ich entschuldige mich wirklich, Maciej, da dies keine endgültige Antwort ist und daher nicht wirklich hilfreich. Ich bitte Sie jedoch, nur eine Minute zu warten und Ihre Webanwendung zu überprüfen. Denken Sie einfach, Sie wollen einen Tisch entwerfen, Dinge bestellen, alles mit Zahlen auflisten. Wäre es nicht besser, dies in Java-Code zu tun? Würden Sie das nicht auch in SQL versuchen? Würden Sie nicht lieber Ergebnisse einer Datenbank mit SQL sortieren? Stellen Sie fest, dass Sie hier eine Organisation arbeiten lassen, in der jeder Mitarbeiter in jeder Abteilung aufgelistet ist, mit Abteilungen als Bestellung.

Sie sehen, ich sage nicht, dass Sie es falsch machen, aber unter den Umständen, und wenn wir aufhören zu analysieren, bekommen wir Entwickler in der Regel geordnete Ergebnisse von der Business-Schicht einer Anwendung, und wir lassen die Ansichtsebene verantwortlich für nur sie anzuzeigen.

Wenn dies in Ihrer Anwendung nicht möglich ist und der Link, den ich Ihnen gesendet habe, Sie nicht zur Lösung Ihres Problems veranlassen kann, tut es mir schrecklich leid, aber ich kann nichts anderes tun. Vielleicht ist es Zeit, dass Sie dies im Thymeleaf Forum fragen, wo seine Entwickler Ihnen wahrscheinlich (wahrscheinlich) helfen können:

Ссылка

Ich hoffe aufrichtig, dass Sie Ihr Problem erfolgreich lösen können. Und wenn Sie das tun, bitte, bitte ich Sie, Ihre Lösung mit allen hier zu teilen, da viele Menschen eines Tages mit der gleichen Situation konfrontiert werden.

Até depois, e boa sorte amigo.

    
Loa 05.03.2015 20:12
quelle
0

Bei allen Schleifenoperationen sollten Sie die Funktion verwenden können iterationStatus Dienstprogramm

Überprüfen Sie den folgenden Code, um den Index des iterativen Elements anzuzeigen.

%Vor%     
Prasanth Ram 05.03.2015 19:21
quelle

Tags und Links