Einführung in die Verwendung von Thymeleaf im Frühjahr

1. Einleitung

Thymeleaf ist eine Java-Template-Engine zum Verarbeiten und Erstellen von HTML, XML, JavaScript, CSS und Text.

In diesem Artikel wird die Verwendung von Thymeleaf mit Spring zusammen mit einigen grundlegenden Anwendungsfällen in der Ansichtsebene einer Spring MVC-Anwendung erläutert .

Die Bibliothek ist extrem erweiterbar und ihre natürliche Vorlagenfunktion stellt sicher, dass Vorlagen ohne Back-End prototypisiert werden können. Dies macht die Entwicklung im Vergleich zu anderen gängigen Vorlagen-Engines wie JSP sehr schnell.

2. Integration von Thymeleaf in Spring

Lassen Sie uns zunächst die Konfigurationen sehen, die für die Integration in Spring erforderlich sind. Die Thymeleaf-Spring- Bibliothek wird für die Integration benötigt.

Fügen Sie Ihrer Maven POM-Datei die folgenden Abhängigkeiten hinzu:

 org.thymeleaf thymeleaf 3.0.11.RELEASE   org.thymeleaf thymeleaf-spring5 3.0.11.RELEASE 

Beachten Sie, dass für ein Spring 4-Projekt die Bibliothek thymeleaf-spring4 anstelle von thymeleaf-spring5 verwendet werden muss .

Die SpringTemplateEngine- Klasse führt alle Konfigurationsschritte aus. Sie können diese Klasse als Bean in der Java-Konfigurationsdatei konfigurieren:

@Bean @Description("Thymeleaf Template Resolver") public ServletContextTemplateResolver templateResolver() { ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); templateResolver.setPrefix("/WEB-INF/views/"); templateResolver.setSuffix(".html"); templateResolver.setTemplateMode("HTML5"); return templateResolver; } @Bean @Description("Thymeleaf Template Engine") public SpringTemplateEngine templateEngine() { SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolver(templateResolver()); templateEngine.setTemplateEngineMessageSource(messageSource()); return templateEngine; }

Das Präfix und das Suffix der templateResolver- Bean-Eigenschaften geben den Speicherort der Ansichtsseiten im Webanwendungsverzeichnis bzw. deren Dateinamenerweiterung an.

Die ViewResolver- Schnittstelle in Spring MVC ordnet die von einem Controller zurückgegebenen Ansichtsnamen tatsächlichen Ansichtsobjekten zu. ThymeleafViewResolver implementiert die ViewResolver- Schnittstelle und wird verwendet, um zu bestimmen, welche Thymeleaf-Ansichten unter einem Ansichtsnamen gerendert werden sollen.

Der letzte Schritt bei der Integration besteht darin, den ThymeleafViewResolver als Bean hinzuzufügen :

@Bean @Description("Thymeleaf View Resolver") public ThymeleafViewResolver viewResolver() { ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); viewResolver.setTemplateEngine(templateEngine()); viewResolver.setOrder(1); return viewResolver; }

3. Thymeleaf im Spring Boot

Spring Boot bietet eine automatische Konfiguration für Thymeleaf durch Hinzufügen der Spring-Boot-Starter-Thymeleaf- Abhängigkeit:

 org.springframework.boot spring-boot-starter-thymeleaf 2.3.3.RELEASE  

Es ist keine explizite Konfiguration erforderlich. Standardmäßig sollten HTML-Dateien am Speicherort für Ressourcen / Vorlagen abgelegt werden .

4. Anzeigen von Werten aus der Nachrichtenquelle (Eigenschaftendateien)

Mit dem Tag-Attribut th: text = ”# {key}” können Werte aus Eigenschaftendateien angezeigt werden. Damit dies funktioniert, muss die Eigenschaftendatei als messageSource- Bean konfiguriert sein :

@Bean @Description("Spring Message Resolver") public ResourceBundleMessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasename("messages"); return messageSource; }

Hier ist der HTML-Code von Thymeleaf, mit dem der mit dem Schlüssel welcome.message verknüpfte Wert angezeigt wird :

5. Modellattribute anzeigen

5.1. Einfache Attribute

Das Tag-Attribut th: text = ”$ {attributename}” kann verwendet werden, um den Wert von Modellattributen anzuzeigen. Fügen wir der Controller-Klasse ein Modellattribut mit dem Namen serverTime hinzu :

model.addAttribute("serverTime", dateFormat.format(new Date()));

Der HTML-Code zum Anzeigen des Werts des serverTime- Attributs:

Current time is 

5.2. Sammlungsattribute

Wenn das Modellattribut eine Sammlung von Objekten ist, kann das Attribut th: jedes Tag verwendet werden, um darüber zu iterieren. Definieren wir eine Student- Modellklasse mit zwei Feldern, id und name :

public class Student implements Serializable { private Integer id; private String name; // standard getters and setters }

Jetzt fügen wir der Controller-Klasse eine Liste von Schülern als Modellattribut hinzu:

List students = new ArrayList(); // logic to build student data model.addAttribute("students", students);

Schließlich können wir Thymeleaf-Vorlagencode verwenden, um die Liste der Schüler zu durchlaufen und alle Feldwerte anzuzeigen:

6. Bedingte Bewertung

6.1. wenn und es sei denn ,

Das Attribut th: if = ”$ {condition}” wird verwendet, um einen Abschnitt der Ansicht anzuzeigen, wenn die Bedingung erfüllt ist. Das Attribut th: without = "$ {condition}" wird verwendet, um einen Abschnitt der Ansicht anzuzeigen, wenn die Bedingung nicht erfüllt ist.

Fügen Sie dem Studentenmodell ein Geschlechterfeld hinzu :

public class Student implements Serializable { private Integer id; private String name; private Character gender; // standard getters and setters }

Angenommen, dieses Feld hat zwei mögliche Werte (M oder F), um das Geschlecht des Schülers anzugeben. Wenn wir die Wörter "Männlich" oder "Weiblich" anstelle des einzelnen Zeichens anzeigen möchten, können wir dies mithilfe des folgenden Thymeleaf-Codes erreichen:

6.2. Schalter und Gehäuse

Die Attribute th: switch und th: case werden verwendet, um Inhalte unter Verwendung der switch-Anweisungsstruktur bedingt anzuzeigen.

Der vorherige Code könnte mit den Attributen th: switch und th: case neu geschrieben werden:

7. Benutzereingaben verarbeiten

Die Formulareingabe kann mit den Attributen th: action = ”@ {url}” und th: object = ”$ {object}” erfolgen . Mit der Aktion th: wird die URL der Formularaktion angegeben, und mit dem Objekt th: wird ein Objekt angegeben, an das die übermittelten Formulardaten gebunden werden. Einzelne Felder werden mit dem Attribut th: field = ”* {name}” zugeordnet , wobei der Name die übereinstimmende Eigenschaft des Objekts ist.

Für die Schülerklasse können wir ein Eingabeformular erstellen:


    

Im obigen Code ist / saveStudent die URL der Formularaktion und ein Schüler das Objekt, das die übermittelten Formulardaten enthält.

Die StudentController- Klasse verarbeitet die Formularübermittlung:

@Controller public class StudentController { @RequestMapping(value = "/saveStudent", method = RequestMethod.POST) public String saveStudent(@ModelAttribute Student student, BindingResult errors, Model model) { // logic to process input data } }

Im obigen Code ordnet die Annotation @RequestMapping die Controller-Methode der im Formular angegebenen URL zu. Die mit Anmerkungen versehene Methode saveStudent () führt die erforderliche Verarbeitung für das übermittelte Formular durch. Die Annotation @ModelAttribute bindet die Formularfelder an das Schülerobjekt .

8. Anzeigen von Validierungsfehlern

Mit der Funktion # fields.hasErrors () kann überprüft werden, ob ein Feld Validierungsfehler aufweist. Mit der Funktion # fields.errors () können Fehler für ein bestimmtes Feld angezeigt werden. Der Feldname ist der Eingabeparameter für beide Funktionen.

HTML-Code zum Iterieren und Anzeigen der Fehler für jedes der Felder im Formular:


    

Anstelle des Feldnamens akzeptieren die obigen Funktionen das Platzhalterzeichen * oder die Konstante all , um alle Felder anzuzeigen. Das Attribut th: jedes wird verwendet, um die mehreren Fehler zu wiederholen, die für jedes der Felder vorhanden sein können.

Der vorherige HTML-Code wurde mit dem Platzhalter * neu geschrieben :


    

oder mit der Konstante all :


    

Ebenso können globale Fehler in Spring mithilfe der globalen Konstante angezeigt werden .

Der HTML-Code zum Anzeigen globaler Fehler:


    

Das Attribut th: Errors kann auch zum Anzeigen von Fehlermeldungen verwendet werden. Der vorherige Code zum Anzeigen von Fehlern im Formular kann mit dem Attribut th: Errors neu geschrieben werden :


    

9. Konvertierungen verwenden

The double bracket syntax {{}} is used to format data for display. This makes use of the formatters configured for that type of field in the conversionService bean of the context file.

The name field in the Student class is formatted:

The above code uses the NameFormatter class, configured by overriding the addFormatters() method from the WebMvcConfigurer interface. For this purpose, our @Configuration class overrides the WebMvcConfigurerAdapter class:

@Configuration public class WebMVCConfig extends WebMvcConfigurerAdapter { // ... @Override @Description("Custom Conversion Service") public void addFormatters(FormatterRegistry registry) { registry.addFormatter(new NameFormatter()); } }

The NameFormatter class implements the Spring Formatter interface.

Das Dienstprogramm #conversions kann auch zum Konvertieren von Objekten für die Anzeige verwendet werden. Die Syntax für die Dienstprogrammfunktion lautet # convertions.convert (Object, Class), wobei Object in Class Class konvertiert wird .

Zur Anzeige Student Objekt Prozentfeld mit dem Bruchteil entfernt:

10. Schlussfolgerung

In diesem Tutorial haben wir gesehen, wie Thymeleaf in eine Spring MVC-Anwendung integriert und verwendet wird.

Wir haben auch Beispiele gesehen, wie Felder angezeigt, Eingaben akzeptiert, Validierungsfehler angezeigt und Daten für die Anzeige konvertiert werden. Eine funktionierende Version des in diesem Artikel gezeigten Codes ist in einem GitHub-Repository verfügbar.