Inleiding tot het gebruik van Thymeleaf in het voorjaar

1. Inleiding

Thymeleaf is een Java-sjabloonengine voor het verwerken en maken van HTML, XML, JavaScript, CSS en tekst.

In dit artikel zullen we bespreken hoe Thymeleaf met Spring te gebruiken samen met enkele basisgebruiksvoorbeelden in de weergavelaag van een Spring MVC-applicatie.

De bibliotheek is extreem uitbreidbaar en de natuurlijke sjablonen zorgen ervoor dat er prototypes van sjablonen kunnen worden gemaakt zonder back-end - wat de ontwikkeling erg snel maakt in vergelijking met andere populaire sjabloonengines zoals JSP.

2. Thymeleaf integreren met de lente

Laten we eerst eens kijken naar de configuraties die nodig zijn om te integreren met Spring. De thymeleaf-spring bibliotheek is vereist voor de integratie.

Voeg de volgende afhankelijkheden toe aan uw Maven POM-bestand:

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

Merk op dat voor een Spring 4-project de thymeleaf-spring4 bibliotheek moet worden gebruikt in plaats van thymeleaf-spring5.

De SpringTemplateMotor class voert alle configuratiestappen uit. U kunt deze klasse als bean configureren in het Java-configuratiebestand:

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

De templateResolver bonen eigenschappen voorvoegsel en achtervoegsel geven de locatie van de weergavepagina's binnen de web applicatie directory en hun bestandsnaamextensie.

De ViewResolver interface in Spring MVC wijst de weergavenamen die door een controller worden geretourneerd toe aan werkelijke weergaveobjecten. ThymeleafViewResolver implementeert het ViewResolver interface en wordt gebruikt om te bepalen welke Thymeleaf-weergaven moeten worden weergegeven, gegeven een weergavenaam.

De laatste stap in de integratie is het toevoegen van het ThymeleafViewResolver als boon:

@Bean @Description ("Thymeleaf View Resolver") openbaar ThymeleafViewResolver viewResolver () {ThymeleafViewResolver viewResolver = nieuw ThymeleafViewResolver (); viewResolver.setTemplateEngine (templateEngine ()); viewResolver.setOrder (1); terug viewResolver; }

3. Thymeleaf in Spring Boot

Spring Boot biedt automatische configuratie voor Thymeleaf door de spring-boot-starter-thymeleaf afhankelijkheid:

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

Er is geen expliciete configuratie nodig. HTML-bestanden moeten standaard in de bronnen / sjablonen plaats.

4. Waarden weergeven uit de berichtbron (eigenschappenbestanden)

De th: text = "# {key}" tag-attribuut kan worden gebruikt om waarden uit eigenschappenbestanden weer te geven. Om dit te laten werken, moet het eigenschappenbestand worden geconfigureerd als messageSource Boon:

@Bean @Description ("Spring Message Resolver") openbare ResourceBundleMessageSource messageSource () {ResourceBundleMessageSource messageSource = nieuwe ResourceBundleMessageSource (); messageSource.setBasename ("berichten"); terug messageSource; }

Hier is de Thymeleaf HTML-code om de waarde weer te geven die aan de sleutel is gekoppeld Welkoms bericht:

5. Modelattributen weergeven

5.1. Eenvoudige attributen

De th: text = "$ {attributename}" tag-attribuut kan worden gebruikt om de waarde van modelattributen weer te geven. Laten we een modelattribuut met de naam toevoegen server tijd in de controllerklasse:

model.addAttribute ("serverTime", dateFormat.format (nieuwe datum ()));

De HTML-code om de waarde van weer te geven server tijd attribuut:

De huidige tijd is 

5.2. Collectie attributen

Als het modelattribuut een verzameling objecten is, is het th: elk tag-attribuut kan worden gebruikt om eroverheen te herhalen. Laten we een Leerling modelklasse met twee velden, ID kaart, en naam:

openbare klasse Student implementeert Serializable {privé Integer-id; private String naam; // standaard getters en setters}

Nu zullen we een lijst met studenten toevoegen als modelattribuut in de controllerklasse:

List students = new ArrayList (); // logica om studentgegevensmodel te bouwen.addAttribute ("studenten", studenten);

Ten slotte kunnen we Thymeleaf-sjablooncode gebruiken om de lijst met studenten te herhalen en alle veldwaarden weer te geven:

6. Voorwaardelijke evaluatie

6.1. als en tenzij

De th: if = "$ {condition}" attribuut wordt gebruikt om een ​​gedeelte van de weergave weer te geven als aan de voorwaarde is voldaan. De th: tenzij = ”$ {condition}” attribuut wordt gebruikt om een ​​gedeelte van de weergave weer te geven als niet aan de voorwaarde wordt voldaan.

Voeg een ... toe geslacht veld naar het Leerling model:

openbare klasse Student implementeert Serializable {privé Integer-id; private String naam; privé personage geslacht; // standaard getters en setters}

Stel dat dit veld twee mogelijke waarden heeft (M of F) om het geslacht van de student aan te geven. Als we de woorden "Man" of "Vrouw" willen weergeven in plaats van het enkele teken, kunnen we dit bereiken door de volgende Thymeleaf-code te gebruiken:

6.2. schakelaar en geval

De th: schakelaar en th: case attributen worden gebruikt om inhoud voorwaardelijk weer te geven met behulp van de switch-statementstructuur.

De vorige code kan worden herschreven met de th: schakelaar en th: case attributen:

7. Omgaan met gebruikersinvoer

Formulierinvoer kan worden afgehandeld met de th: action = "@ {url}" en th: object = "$ {object}" attributen. De th: actie wordt gebruikt om de actie-URL van het formulier op te geven en th: object wordt gebruikt om een ​​object te specificeren waaraan de ingediende formuliergegevens zullen worden gebonden. Individuele velden worden in kaart gebracht met behulp van de th: field = "* {naam}" attribuut, waarbij de naam is de overeenkomende eigenschap van het object.

Voor de Leerling klasse, kunnen we een invoerformulier maken:

In de bovenstaande code, / saveStudent is de formulieractie-URL en een leerling is het object dat de ingediende formuliergegevens bevat.

De StudentController klasse behandelt de indiening van het formulier:

@Controller public class StudentController {@RequestMapping (value = "/ saveStudent", method = RequestMethod.POST) public String saveStudent (@ModelAttribute Student student, BindingResult fouten, modelmodel) {// logica om invoergegevens te verwerken}}

In de bovenstaande code is de @RequestMapping annotatie brengt de controller-methode in kaart met de URL die in het formulier wordt verstrekt. De geannoteerde methode saveStudent () voert de vereiste verwerking uit voor het ingediende formulier. De @ModelAttribute annotatie bindt de formuliervelden aan de leerling voorwerp.

8. Validatiefouten weergeven

De # fields.hasErrors () functie kan worden gebruikt om te controleren of een veld validatiefouten bevat. De # fields.errors () functie kan worden gebruikt om fouten voor een bepaald veld weer te geven. De veldnaam is de invoerparameter voor beide functies.

HTML-code om de fouten voor elk van de velden in het formulier te herhalen en weer te geven:

In plaats van de veldnaam accepteren de bovenstaande functies het jokerteken * of de constante alle om alle velden aan te geven. De th: elk attribuut wordt gebruikt om de meerdere fouten te herhalen die voor elk van de velden aanwezig kunnen zijn.

De vorige HTML-code herschreven met behulp van het jokerteken *:

of met behulp van de constante alle:

Evenzo kunnen algemene fouten in Spring worden weergegeven met de globaal constante.

De HTML-code om algemene fouten weer te geven:

De th: fouten attribuut kan ook worden gebruikt om foutmeldingen weer te geven. De vorige code om fouten in het formulier weer te geven, kan worden herschreven met th: fouten attribuut:

9. Conversies gebruiken

De syntaxis van dubbele haakjes {{}} wordt gebruikt om gegevens op te maken voor weergave. Dit maakt gebruik van de formatters geconfigureerd voor dat type veld in het conversionService bean van het contextbestand.

Het naamveld in het Leerling klasse is opgemaakt:

De bovenstaande code gebruikt de NameFormatter class, geconfigureerd door de addFormatters () methode van de WebMvcConfigurer koppel. Voor dit doel zijn onze @Configuratie klasse overschrijft de WebMvcConfigurerAdapter klasse:

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

De NameFormatter klasse implementeert de lente Formatter koppel.

De #conversies hulpprogramma kan ook worden gebruikt om objecten te converteren voor weergave. De syntaxis voor de hulpprogramma-functie is # conversions.convert (Object, Class) waar Voorwerp wordt geconverteerd naar Klasse type.

Weergeven leerling voorwerp percentage veld met het fractionele deel verwijderd:

10. Conclusie

In deze tutorial hebben we gezien hoe we Thymeleaf kunnen integreren en gebruiken in een Spring MVC-applicatie.

We hebben ook voorbeelden gezien van het weergeven van velden, het accepteren van invoer, het weergeven van validatiefouten en het converteren van gegevens voor weergave. Een werkende versie van de code die in dit artikel wordt getoond, is beschikbaar in een GitHub-repository.