Endring av Thymeleaf Template Directory i Spring Boot

1. Introduksjon

Thymeleaf er en malmotor som vi kan bruke til Spring Boot-applikasjoner. Som med mange ting, Spring Boot gir en standardplassering der den forventer å finne malene våre.

I denne korte opplæringen skal vi se på hvordan vi kan endre malplasseringen. Når vi har gjort det, lærer vi hvordan vi kan ha flere steder.

2. Oppsett

For å bruke Thymeleaf, må vi legge til riktig Spring Boot starter i vår pom.xml:

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

3. Endre standardposisjon

Som standard ser Spring Boot etter malene våre i src / hoved / ressurser / maler. Vi kan legge malene våre der og organisere dem i underkataloger og har ingen problemer.

La oss forestille oss at vi har et krav om at alle malene våre ligger i en katalog som heter maler-2.

La oss lage en mal for å si hei og legge den inn src / main / resources / templates-2:

    Enums i Thymeleaf 

Hei fra 'maler / maler-2'

Vi trenger også en kontroller:

@GetMapping ("/ hallo") offentlig streng si hallo () {return "hei"; }

Med det grunnleggende oppsettet ute av veien, la oss konfigurere Spring Boot til å bruke vår maler-2 katalog ved å overstyre en eiendom i application.properties:

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

Nå, når vi kaller vår HelloController, vi får se hilsenen vår fra hei.html.

4. Bruke flere steder

Nå som vi har lært hvordan vi endrer standardplasseringen, la oss se hvordan vi kan bruke flere malplasseringer.

For å gjøre dette, la oss lage en ClassLoaderTemplateResolver bønne:

@Bean public ClassLoaderTemplateResolver secondaryTemplateResolver () {ClassLoaderTemplateResolver secondaryTemplateResolver = new ClassLoaderTemplateResolver (); secondaryTemplateResolver.setPrefix ("maler-2 /"); secondaryTemplateResolver.setSuffix (". html"); secondaryTemplateResolver.setTemplateMode (TemplateMode.HTML); secondaryTemplateResolver.setCharacterEncoding ("UTF-8"); secondaryTemplateResolver.setOrder (1); secondaryTemplateResolver.setCheckExistence (true); returnere secondTemplateResolver; }

I vår tilpassede bønne setter vi prefikset til den sekundære malkatalogen vi bruker: maler-2. Vi setter også Sjekkeksistens flagg til ekte. Dette er nøkkelen til å la resolverne operere i en kjede.

Med dette konfigurert kan applikasjonen vår bruke maler fra standard hoved / ressurser / maler katalog og hoved / ressurser / maler-2.

5. Feil

Når vi jobber med Thymeleaf, kan vi se denne feilen:

Feil ved løsning av mal [hallo], mal eksisterer kanskje ikke eller er ikke tilgjengelig for noen av de konfigurerte malresolverne

Vi ser denne meldingen når Thymeleaf av en eller annen grunn ikke kan finne malen. La oss se på noen av de mulige årsakene til dette og hvordan vi løser dem.

5.1. Feilfeil i kontrolleren

Vi kan ofte se denne feilen på grunn av en enkel skrivefeil. Det første du må sjekke er at filnavnet minus utvidelsen og malen vi ber om i kontrolleren vår stemmer nøyaktig overens. Hvis vi bruker underkataloger, må vi sørge for at de også er korrekte.

I tillegg kan problemet være et problem med visse operativsystemer. Windows er ikke mellom store og små bokstaver, men andre operativsystemer er det. Vi bør se på dette hvis alt fungerer bra, for eksempel på vår lokale Windows-maskin, men ikke en gang vi har distribuert.

5.2. Inkludert filtypen i kontrolleren

Siden filene våre vanligvis har en utvidelse, kan det være naturlig å inkludere dem når vi returnerer malstien vår i kontrolleren. Thymeleaf legger automatisk til suffikset, så vi bør unngå å levere det.

5.3. Bruker ikke standardplasseringen

Vi vil også se denne feilen hvis vi har plassert malene våre et annet sted enn src / hoved / ressurser / maler. Hvis vi vil bruke et annet sted, må vi enten stille inn spring.thymeleaf.prefix eiendom eller lage vår egen ClassLoaderTemplateResolver bønne for å håndtere flere steder.

6. Konklusjon

I denne raske opplæringen lærte vi om Thymeleaf malplasseringer. Først så vi hvordan du endrer standardplasseringen ved å sette en eiendom. Så bygde vi på det ved å lage våre egne ClassLoaderTemplateResolver å bruke flere steder.

Vi avsluttet en diskusjon om feilen, vi ser når Thymeleaf ikke finner malene våre og hvordan vi løser det.

Som alltid kan eksempelkoden bli funnet på GitHub.


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