Ændring af Thymeleaf Template Directory i Spring Boot

1. Introduktion

Thymeleaf er en skabelonmotor, som vi kan bruge til vores Spring Boot-applikationer. Som med mange ting, Spring Boot giver en standardplacering, hvor den forventer at finde vores skabeloner.

I denne korte vejledning skal vi se på, hvordan vi kan ændre skabelonplaceringen. Når vi har gjort det, lærer vi, hvordan vi har flere placeringer.

2. Opsætning

For at bruge Thymeleaf er vi nødt til at tilføje den passende Spring Boot starter til vores pom.xml:

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

3. Ændring af standardplacering

Spring Boot ser som standard efter vores skabeloner i src / main / ressourcer / skabeloner. Vi kan placere vores skabeloner der og organisere dem i underkataloger og har ingen problemer.

Lad os forestille os, at vi har et krav om, at alle vores skabeloner findes i en mappe, der hedder skabeloner-2.

Lad os oprette en skabelon til at sige hej og lægge den i src / main / resources / templates-2:

    Enums i Thymeleaf 

Hej fra 'skabeloner / skabeloner-2'

Vi har også brug for en controller:

@GetMapping ("/ hej") offentlig String sayHello () {returner "hej"; }

Med den grundlæggende opsætning ude af vejen, lad os konfigurere Spring Boot til at bruge vores skabeloner-2 katalog ved at tilsidesætte en ejendom i application.properties:

spring.thymeleaf.prefix = classpath: / templates-2 /

Nu, når vi kalder vores HelloController, vi ser vores hilsen fra hej.html.

4. Brug af flere placeringer

Nu hvor vi har lært, hvordan vi ændrer standardplaceringen, lad os se, hvordan vi kan bruge flere skabelonplaceringer.

Lad os lave en for at gøre dette ClassLoaderTemplateResolver bønne:

@Bean offentlig ClassLoaderTemplateResolver sekundærTemplateResolver () {ClassLoaderTemplateResolver secondTemplateResolver = ny ClassLoaderTemplateResolver (); sekundær TemplateResolver.setPrefix ("skabeloner-2 /"); sekundær TemplateResolver.setSuffix (". html"); sekundærTemplateResolver.setTemplateMode (TemplateMode.HTML); secondaryTemplateResolver.setCharacterEncoding ("UTF-8"); sekundærTemplateResolver.setOrder (1); secondaryTemplateResolver.setCheckExistence (true); returner sekundærTemplateResolver; }

I vores brugerdefinerede bønne indstiller vi vores præfiks til den sekundære skabelonkatalog, vi bruger: skabeloner-2. Vi indstiller også CheckExistance flag til rigtigt. Dette er nøglen til at lade resolverne operere i en kæde.

Med dette konfigureret kan vores applikation bruge skabeloner fra standard hoved / ressourcer / skabeloner bibliotek og hoved / ressourcer / skabeloner-2.

5. Fejl

Når vi arbejder med Thymeleaf, ser vi muligvis denne fejl:

Fejl ved løsning af skabelon [hej], skabelon findes muligvis ikke eller er muligvis ikke tilgængelig for nogen af ​​de konfigurerede skabelonopløsere

Vi ser denne meddelelse, når Thymeleaf af en eller anden grund ikke kan finde skabelonen. Lad os se på nogle af de mulige årsager til dette, og hvordan vi løser dem.

5.1. Typo i controlleren

Vi kan ofte se denne fejl på grund af en simpel skrivefejl. Den første ting at kontrollere er, at vores filnavn minus udvidelsen og den skabelon, vi beder om i vores controller, matcher nøjagtigt. Hvis vi bruger underkataloger, skal vi sikre, at de også er korrekte.

Derudover kan problemet være et problem med visse operativsystemer. Windows er ikke store og små bogstaver, men andre operativsystemer er det. Vi bør se på dette, hvis alt fungerer fint, for eksempel på vores lokale Windows-maskine, men ikke når vi først er implementeret.

5.2. Inkluderet filtypen i controlleren

Da vores filer typisk har en udvidelse, kan det være naturligt at medtage dem, når vi returnerer vores skabelonsti i controlleren. Thymeleaf tilføjer automatisk suffikset, så vi bør undgå at levere det.

5.3. Brug ikke standardplaceringen

Vi får også vist denne fejl, hvis vi har placeret vores skabeloner et andet sted end src / main / ressourcer / skabeloner. Hvis vi vil bruge en anden placering, skal vi enten indstille spring.thymeleaf.prefix ejendom eller oprette vores egen ClassLoaderTemplateResolver bønne til at håndtere flere placeringer.

6. Konklusion

I denne hurtige vejledning lærte vi om Thymeleaf-skabelonplaceringer. Først så vi, hvordan man ændrede standardplaceringen ved at indstille en ejendom. Så byggede vi på det ved at skabe vores egne ClassLoaderTemplateResolver at bruge flere placeringer.

Vi afsluttede en diskussion af fejlen, vi ser, når Thymeleaf ikke kan finde vores skabeloner, og hvordan man løser det.

Som altid kan eksempelkoden findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found