Thymeleaf: Dialekt für benutzerdefiniertes Layout

Thymeleaf: Benutzerdefinierter Layout-Dialekt

1. Einführung

Thymeleaf ist eine Java-Vorlagen-Engine zum Verarbeiten und Erstellen von HTML, XML, JavaScript, CSS und einfachem Text. Ein Intro zu Thymeleaf und Spring finden Sie unterthis write-up.

In diesem Artikel konzentrieren wir uns auf Vorlagen - etwas, das die meisten recht komplexen Websites auf die eine oder andere Weise tun müssen. Einfach ausgedrückt, Seiten müssen gemeinsame Seitenkomponenten wie Kopfzeile, Fußzeile, Menü und möglicherweise vieles mehr aufweisen.

Thymeleaf adressiert, dass mit benutzerdefinierten Dialekten - Sie können Layouts mitThymeleaf Standard Layout System oderLayout Dialect erstellen - das Dekorationsmuster für die Arbeit mit den Layoutdateien verwendet wird.

In diesem Artikel werden einige Funktionen vonThymeleaf Layout Dialect erläutert, diehere enthalten. Um genauer zu sein, werden wir die Funktionen wie das Erstellen von Layouts, benutzerdefinierte Titel oder das Zusammenführen von Kopfelementen diskutieren.

2. Maven-Abhängigkeiten

Lassen Sie uns zunächst die erforderliche Konfiguration sehen, die für die Integration von Thymeleaf in Spring erforderlich ist. Die Bibliothekthymeleaf-springwird in unseren Abhängigkeiten benötigt:


    org.thymeleaf
    thymeleaf
    3.0.9.RELEASE


    org.thymeleaf
    thymeleaf-spring4
    3.0.9.RELEASE

Beachten Sie, dass für ein Spring 4-Projekt die Bibliothekthymeleaf-spring4anstelle vonthymeleaf-spring5verwendet werden muss. Die neueste Version der Abhängigkeiten isthere.

Wir benötigen auch eine Abhängigkeit für den Dialekt für benutzerdefinierte Layouts:


    nz.net.ultraq.thymeleaf
    thymeleaf-layout-dialect
    2.3.0

Die neueste Version finden Sie unterMaven Central Repository.

3. Thymeleaf Layout Dialect Konfiguration

In diesem Abschnitt wird erläutert, wie Sie Thymeleaf für die Verwendung vonLayout Dialect konfigurieren. Wenn Sie einen Schritt zurücktreten und sehen möchten, wie Sie Thymeleaf 3.0 in Ihrem Web-App-Projekt konfigurieren, überprüfen Sie diesetutorial.

Sobald wir die Maven-Abhängigkeit als Teil eines Projekts hinzugefügt haben, müssen wir dieLayout Dialect zu unserer vorhandenen Thymeleaf-Vorlagen-Engine hinzufügen. Wir können dies mit der Java-Konfiguration tun:

SpringTemplateEngine engine = new SpringTemplateEngine();
engine.addDialect(new LayoutDialect());

Oder mithilfe der XML-Dateikonfiguration:


    
        
            
        
    

Beim Dekorieren der Abschnitte der Inhalts- und Layoutvorlagen werden standardmäßig alle Inhaltselemente nach den Layoutelementen platziert.

Manchmal brauchen wir eine intelligentere Zusammenführung von Elementen, um ähnliche Elemente (js-Skripte, Stylesheets usw.) zu gruppieren.

Um dies zu erreichen, müssen wir unserer Konfiguration eine Sortierstrategie hinzufügen - in unserem Fall ist dies die Gruppierungsstrategie:

engine.addDialect(new LayoutDialect(new GroupingStrategy()));

oder in XML:


    

Die Standardstrategie ist das Anhängen von Elementen. Mit oben genannten haben wir alles sortiert und gruppiert.

Wenn keine der beiden Strategien unseren Anforderungen entspricht, können wir eigeneSortingStrategyimplementieren und wie oben beschrieben an den Dialekt weitergeben.

4. Funktionen von Namespace- und Attributprozessoren

Nach der Konfiguration können wir den Namespace vonlayoutund fünf neue Attributprozessoren verwenden:decorate,title-pattern,insert,replace undfragment.

Um eine Layoutvorlage zu erstellen, die wir für unsere HTML-Dateien verwenden möchten, haben wir die folgende Datei mit dem Namentemplate.html erstellt:



...

Wie wir sehen können, haben wir den Namespace von Standardxmlns:th=”http://www.thymeleaf.org” inxmlns:layout=”http://www.ultraq.net.nz/thymeleaf/layout” geändert.

Jetzt können wir mit Attributprozessoren in unseren HTML-Dateien arbeiten.

4.1. layout:fragment

Um benutzerdefinierte Abschnitte in unserem Layout oder wiederverwendbare Vorlagen zu erstellen, die durch Abschnitte mit demselben Namen ersetzt werden können, verwenden wir das Attributfragmentinnerhalb unserestemplate.html-Körpers:


    

New dialect example

Your page content goes here

My custom footer

Your custom footer here

Beachten Sie, dass es zwei Abschnitte gibt, die durch unseren benutzerdefinierten HTML-Inhalt und die Fußzeile ersetzt werden.

Es ist auch wichtig, den Standard-HTML-Code zu schreiben, der verwendet wird, wenn eines der Fragmente nicht gefunden wird.

4.2. layout:decorate

Der nächste Schritt, den wir machen müssen, ist die Erstellung einer HTML-Datei, die von unserem Layout gestaltet wird:




Layout Dialect Example


    

This is a custom content that you can provide

This is some footer content that you can change

Wie in der 3. Zeile gezeigt, verwenden wirlayout:decorate und geben die Dekorationsquelle an. Alle Fragmente aus der Layoutdatei, die mit Fragmenten in einer Inhaltsdatei übereinstimmen, werden durch die benutzerdefinierte Implementierung ersetzt.

4.3. layout:title-pattern

DaLayout dialect den Titel des Layouts automatisch mit dem Titel überschreibt, der in der Inhaltsvorlage enthalten ist, können Sie Teile des Titels im Layout beibehalten.

Beispielsweise können wir Breadcrumbs erstellen oder den Namen der Website im Seitentitel beibehalten. Der Prozessor vonlayout:title-patternwird in einem solchen Fall mit einer Hilfe geliefert. Alles, was Sie in Ihrer Layoutdatei angeben müssen, ist:

example

Das Endergebnis für die Layout- und Inhaltsdatei im vorherigen Absatz sieht also folgendermaßen aus:

example - Layout Dialect Example

4.4. layout:insert/layout:replace

Der erste Prozessor,layout:insert, ähnelt Thymeleafs ursprünglichemth:insert, ermöglicht jedoch die Übergabe der gesamten HTML-Fragmente an die eingefügte Vorlage. Es ist sehr nützlich, wenn Sie HTML-Code haben, den Sie wiederverwenden möchten, dessen Inhalt jedoch zu komplex ist, um ihn nur mit Kontextvariablen zu bestimmen oder zu konstruieren.

Das zweite,layout:replace, ähnelt dem ersten, jedoch mit dem Verhalten vonth:replace, das das Host-Tag tatsächlich durch den Code des definierten Fragments ersetzt.

5. Fazit

In diesem Artikel haben wir einige Möglichkeiten zur Implementierung von Layouts in Thymeleaf beschrieben.

Beachten Sie, dass die Beispiele die Thymeleaf-Version 3.0 verwenden. Wenn Sie lernen möchten, wie Sie Ihr Projekt migrieren, befolgen Sie bitte dieseprocedure.

Die vollständige Implementierung dieses Tutorials finden Sie inthe GitHub project.

How to test? Wir empfehlen, zuerst mit einem Browser zu spielen und dann auch die vorhandenen JUnit-Tests zu überprüfen.

Denken Sie daran, dass Sie Layouts mit den oben genanntenLayout Dialecterstellen oder ganz einfach Ihre eigene Lösung erstellen können. Hoffentlich gibt Ihnen dieser Artikel weitere Einblicke in das Thema und Sie werden Ihren bevorzugten Ansatz je nach Ihren Bedürfnissen finden.