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

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

1. Einführung

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

In diesem Artikel werdenhow to use Thymeleaf with Spring zusammen mit einigen grundlegenden Anwendungsfällen in der Ansichtsebene einer Spring MVC-Anwendung erläutert.

Die Bibliothek ist extrem erweiterbar und dank ihrer natürlichen Vorlagenfunktion können Vorlagen ohne Back-End prototypisiert werden. 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. Diethymeleaf-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.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 KlasseSpringTemplateEnginefü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;
}

Die Bean-EigenschaftentemplateResolverprefix undsuffix geben die Position der Ansichtsseiten im Verzeichniswebapp bzw. deren Dateinamenerweiterung an.

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

Der letzte Schritt bei der Integration besteht darin,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. Anzeigen von Werten aus der Nachrichtenquelle (Eigenschaftendateien)

Das Tag-Attributth:text=”#{key}” kann verwendet werden, um Werte aus Eigenschaftendateien anzuzeigen. Damit dies funktioniert, muss die Eigenschaftendatei alsmessageSource 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, um den Wert anzuzeigen, der dem Schlüsselwelcome.message zugeordnet ist:

4. Modellattribute anzeigen

4.1. Einfache Attribute

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

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

Der HTML-Code zum Anzeigen des Werts des AttributsserverTime:

Current time is 

4.2. Sammlungsattribute

Wenn das Modellattribut eine Sammlung von Objekten ist, kann das Tag-Attributth:eachverwendet werden, um darüber zu iterieren. Definieren wir eineStudent Modellklasse mit zwei Feldern,id undname:

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

Nun fügen wir eine Liste von Schülern als Modellattribut in die Controller-Klasse ein:

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

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


    
        
        
    

5. Bedingte Bewertung

5.1. if undunless

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

Fügen Sie dem Modell vonStudentein Feldgenderhinzu:

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 mit dem folgenden Thymeleaf-Code erreichen:


    
    

5.2. switch undcase

Die Attributeth:switch undth:case werden verwendet, um Inhalte unter Verwendung der switch-Anweisungsstruktur bedingt anzuzeigen.

Der vorherige Code kann mit den Attributenth:switch undth:case neu geschrieben werden:


    
    

6. Benutzereingaben verarbeiten

Die Formulareingabe kann mit den Attributenth:action=”@{url}” undth:object=”${object}” erfolgen. Mitth:action wird die URL der Formularaktion angegeben, und mitth:object wird ein Objekt angegeben, an das die übermittelten Formulardaten gebunden werden. Einzelne Felder werden mit dem Attributth:field=”*{name}” zugeordnet, wobeiname die übereinstimmende Eigenschaft des Objekts ist.

Für die KlasseStudentkönnen wir ein Eingabeformular erstellen:

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

Die KlasseStudentControllerbehandelt 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@RequestMappingder Controller-Methode die im Formular angegebene URL zu. Die mit Anmerkungen versehene MethodesaveStudent() führt die erforderliche Verarbeitung für das übermittelte Formular durch. Die Annotation@ModelAttributebindet die Formularfelder an das Objektstudent.

7. 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 Konstanteall, um alle Felder anzuzeigen. Das Attributth:each 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 unter Verwendung der Konstantenall:

Ebenso können globale Fehler in Spring mit der Konstanteglobalangezeigt werden.

Der HTML-Code zum Anzeigen globaler Fehler:

Das Attributth:errors kann auch zum Anzeigen von Fehlermeldungen verwendet werden. Der vorherige Code zum Anzeigen von Fehlern im Formular kann mit dem Attributth:errorsneu geschrieben werden:

8. Konvertierungen verwenden

Die doppelte Klammernsyntax\{\{}} wird verwendet, um Daten für die Anzeige zu formatieren. Dies verwendet dieformatters, die für diesen Feldtyp in derconversionService-Bean der Kontextdatei konfiguriert sind.

Das Namensfeld in der KlasseStudentist formatiert:


    

Der obige Code verwendet die KlasseNameFormatter, die durch Überschreiben der MethodeaddFormatters() von der SchnittstelleWebMvcConfigurer konfiguriert wird. Zu diesem Zweck überschreibt unsere Klasse@Configurationdie KlasseWebMvcConfigurerAdapter:

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

Die KlasseNameFormatterimplementiert die Schnittstelle SpringFormatter.

Das Dienstprogramm#conversionskann auch zum Konvertieren von Objekten für die Anzeige verwendet werden. Die Syntax für die Utility-Funktion lautet#conversions.convert(Object, Class), wobeiObject in den TypClass konvertiert wird.

So zeigen Sie das Feldstudent Objektpercentage an, wobei der Bruchteil entfernt wurde:


    

9. Fazit

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

Wir haben auch Beispiele für das Anzeigen von Feldern, das Akzeptieren von Eingaben, das Anzeigen von Validierungsfehlern und das Konvertieren von Daten zur Anzeige gesehen. Eine Arbeitsversion des in diesem Artikel gezeigten Codes ist ina GitHub repository verfügbar.