Introduktion til brug af Thymeleaf om foråret

1. Introduktion

Thymeleaf er en Java-skabelonmotor til behandling og oprettelse af HTML, XML, JavaScript, CSS og tekst.

I denne artikel vil vi diskutere hvordan man bruger Thymeleaf med Spring sammen med nogle grundlæggende brugssager i visningslaget i en Spring MVC-applikation.

Biblioteket er ekstremt udvideligt, og dets naturlige skabelonfunktion sikrer, at skabeloner kan prototypes uden back-end - hvilket gør udviklingen meget hurtig sammenlignet med andre populære skabelonmotorer som JSP.

2. Integrering af Thymeleaf med Spring

Lad os først se de konfigurationer, der kræves for at integrere med Spring. Det thymeleaf-spring bibliotek kræves for integrationen.

Føj følgende afhængigheder til din Maven POM-fil:

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

Bemærk, at for et Spring 4-projekt, thymeleaf-spring4 biblioteket skal bruges i stedet for thymeleaf-spring5.

Det SpringTemplateEngine klasse udfører alle konfigurationstrin. Du kan konfigurere denne klasse som en bønne i Java-konfigurationsfilen:

@Bean @Description ("Thymeleaf Template Resolver") offentlig ServletContextTemplateResolver templateResolver () {ServletContextTemplateResolver templateResolver = ny ServletContextTemplateResolver (); templateResolver.setPrefix ("/ WEB-INF / visninger /"); templateResolver.setSuffix (". html"); templateResolver.setTemplateMode ("HTML5"); retur skabelonResolver; } @Bean @Description ("Thymeleaf Template Engine") offentlig SpringTemplateEngine templateEngine () {SpringTemplateEngine templateEngine = ny SpringTemplateEngine (); templateEngine.setTemplateResolver (templateResolver ()); templateEngine.setTemplateEngineMessageSource (messageSource ()); returskabelonMotor; }

Det skabelonResolver bønneegenskaber præfiks og suffiks angive placeringen af ​​visningssiderne inden for webapp katalog og deres filtypenavn, henholdsvis.

Det ViewResolver interface i Spring MVC kortlægger visningsnavne, der returneres af en controller, til faktiske visningsobjekter. ThymeleafViewResolver implementerer ViewResolver interface og bruges til at bestemme, hvilke Thymeleaf-visninger der skal gengives, givet et visningsnavn.

Det sidste trin i integrationen er at tilføje ThymeleafViewResolver som en bønne:

@Bean @Description ("Thymeleaf View Resolver") offentlig ThymeleafViewResolver viewResolver () {ThymeleafViewResolver viewResolver = ny ThymeleafViewResolver (); viewResolver.setTemplateEngine (templateEngine ()); viewResolver.setOrder (1); returner visningResolver; }

3. Thymeleaf i Spring Boot

Spring Boot giver automatisk konfiguration til Thymeleaf ved at tilføje spring-boot-starter-thymeleaf afhængighed:

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

Ingen eksplicit konfiguration er nødvendig. Som standard skal HTML-filer placeres i ressourcer / skabeloner Beliggenhed.

4. Visning af værdier fra meddelelseskilde (egenskabsfiler)

Det th: text = ”# {key}” tag-attribut kan bruges til at vise værdier fra egenskabsfiler. For at dette skal fungere, skal ejendomsfilen konfigureres som messageSource bønne:

@Bean @Description ("Spring Message Resolver") offentlig ResourceBundleMessageSource messageSource () {ResourceBundleMessageSource messageSource = ny ResourceBundleMessageSource (); messageSource.setBasename ("beskeder"); returnere beskedKilde; }

Her er Thymeleaf HTML-koden for at vise den værdi, der er knyttet til nøglen velkommen. besked:

5. Visning af modelattributter

5.1. Enkle attributter

Det th: text = ”$ {attributename}” tagattribut kan bruges til at vise værdien af ​​modelattributter. Lad os tilføje en modelattribut med navnet servertid i controller-klassen:

model.addAttribute ("serverTime", dateFormat.format (ny dato ()));

HTML-koden, der skal vises værdien af servertid attribut:

Nuværende tid er 

5.2. Samlingsattributter

Hvis modelattributten er en samling objekter, vises th: hver tag-attribut kan bruges til at gentage det. Lad os definere en Studerende modelklasse med to felter, idog navn:

offentlig klasse Elevimplementer Serialiserbar {privat heltal-id; privat strengnavn; // standard getters og setter}

Nu vil vi tilføje en liste over studerende som modelattribut i controller-klassen:

Liste studerende = ny ArrayList (); // logik til at opbygge elevdatamodel.addAttribute ("studerende", studerende);

Endelig kan vi bruge Thymeleaf-skabelonkode til at gentage listen over studerende og vise alle feltværdier:

6. Betinget evaluering

6.1. hvis og med mindre

Det th: if = ”$ {condition}” attribut bruges til at vise et udsnit af visningen, hvis betingelsen er opfyldt. Det th: medmindre = ”$ {condition}” attribut bruges til at vise et udsnit af visningen, hvis betingelsen ikke er opfyldt.

Tilføj en køn felt til Studerende model:

offentlig klasse Elevimplementer Serialiserbar {privat heltal id; privat strengnavn; privat karakter køn; // standard getters og setter}

Antag at dette felt har to mulige værdier (M eller F) til at indikere den studerendes køn. Hvis vi ønsker at vise ordene "Mand" eller "Kvinde" i stedet for det enkelte tegn, kan vi opnå dette ved at bruge følgende Thymeleaf-kode:

6.2. kontakt og sag

Det th: switch og th: sag attributter bruges til at vise indhold betinget ved hjælp af switch-sætningsstrukturen.

Den forrige kode kunne omskrives ved hjælp af th: switch og th: sag egenskaber:

7. Håndtering af brugerinput

Formularinput kan håndteres ved hjælp af th: action = ”@ {url}” og th: object = ”$ {object}” egenskaber. Det th: handling bruges til at angive formularens URL og th: objekt bruges til at specificere et objekt, som de indsendte formulardata vil være bundet til. Individuelle felter kortlægges ved hjælp af th: field = ”* {name}” attribut, hvor navn er objektets matchende egenskab.

Til Studerende klasse, kan vi oprette en inputformular:

I ovenstående kode, / saveStudent er URL-adressen til formhandling og a studerende er det objekt, der indeholder de indsendte formulardata.

Det StudentController klasse håndterer formularindsendelsen:

@Controller public class StudentController {@RequestMapping (value = "/ saveStudent", method = RequestMethod.POST) public String saveStudent (@ModelAttribute Studentstudent, BindingResult-fejl, Modelmodel) {// logik til behandling af inputdata}}

I ovenstående kode er @RequestMapping annotation kortlægger controller-metoden med URL angivet i formularen. Den kommenterede metode saveStudent () udfører den krævede behandling af den indsendte form. Det @ModelAttribute kommentar binder formularfelterne til studerende objekt.

8. Visning af valideringsfejl

Det # fields.hasErrors () funktionen kan bruges til at kontrollere, om et felt har valideringsfejl. Det # fields.errors () funktionen kan bruges til at vise fejl for et bestemt felt. Feltnavnet er inputparameteren for begge disse funktioner.

HTML-kode for at gentage og vise fejlene for hvert af felterne i formularen:

I stedet for feltnavn accepterer ovenstående funktioner wildcard-tegnet * eller konstanten alle for at angive alle felter. Det th: hver attribut bruges til at gentage de mange fejl, der kan være til stede for hvert af felterne.

Den tidligere HTML-kode blev omskrevet ved hjælp af jokertegnet *:

eller ved hjælp af konstanten alle:

Tilsvarende kan globale fejl i foråret vises ved hjælp af global konstant.

HTML-koden til at vise globale fejl:

Det th: fejl attribut kan også bruges til at vise fejlmeddelelser. Den forrige kode til at vise fejl i formularen kan skrives om ved hjælp af th: fejl attribut:

9. Brug af konverteringer

Den dobbelte parentes-syntaks {{}} bruges til at formatere data til visning. Dette gør brug af formatere konfigureret til den type felt i conversionService bønne i kontekstfilen.

Navnefeltet i Studerende klasse er formateret:

Ovenstående kode bruger NameFormatter klasse, konfigureret ved at tilsidesætte addFormatters () metode fra WebMvcConfigurer interface. Til dette formål er vores @Konfiguration klasse tilsidesætter WebMvcConfigurerAdapter klasse:

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

Det NameFormatter klasse implementerer foråret Formater interface.

Det #konverteringer værktøj kan også bruges til at konvertere objekter til visning. Syntaksen for hjælpefunktionen er # conversions.convert (Objekt, klasse) hvor Objekt konverteres til Klasse type.

At vise studerende objekt procent felt med brøkdelen fjernet:

10. Konklusion

I denne vejledning har vi set, hvordan man integrerer og bruger Thymeleaf i en Spring MVC-applikation.

Vi har også set eksempler på, hvordan man viser felter, accepterer input, viser valideringsfejl og konverterer data til visning. En fungerende version af koden vist i denne artikel er tilgængelig i et GitHub-arkiv.