Promjena direktorija predloška majčine dušice u proljetnom pokretanju

1. Uvod

Thymeleaf je mehanizam predložaka koji možemo koristiti za naše aplikacije Spring Boot. Kao i kod mnogih stvari, Spring Boot pruža zadano mjesto na kojem očekuje da pronađe naše predloške.

U ovom ćemo kratkom vodiču pogledati kako možemo promijeniti mjesto predloška. Nakon što to učinimo, naučit ćemo kako imati više lokacija.

2. Postavljanje

Da bismo koristili Thymeleaf, u naš moramo dodati odgovarajući pokretač Spring Boot pom.xml:

 org.springframework.boot spring-boot-starter-thymeleaf 2.2.2.OSLOBOĐENJE 

3. Promjena zadanog mjesta

Prema zadanim postavkama Spring Boot traži naše predloške u src / main / resources / predlošci. Tamo možemo staviti svoje predloške i organizirati ih u poddirektorijima, a bez problema.

Sada, zamislimo da imamo zahtjev da se svi naši predlošci nalaze u direktoriju zvanom predlošci-2.

Stvorimo predložak za pozdrav i stavimo ga src / main / resources / templates-2:

    Enumi u majčinoj dušici 

Pozdrav iz 'predlošci / predlošci-2'

Trebat će nam i kontroler:

@GetMapping ("/ hello") javni niz sayHello () {return "hello"; }

S tim osnovnim postavljanjem, konfigurirajmo Spring Boot da koristi naš predlošci-2 direktorij nadjačavanjem svojstva u primjena.svojstva:

spring.thymeleaf.prefix = put do klase: / templates-2 /

Sad, kad zovemo svoje HelloController, vidjet ćemo naš pozdrav od zdravo.html.

4. Korištenje više lokacija

Sad kad smo naučili kako promijeniti zadano mjesto, pogledajmo kako možemo koristiti više lokacija predloška.

Da bismo to učinili, stvorimo a ClassLoaderTemplateResolver grah:

@Bean public ClassLoaderTemplateResolver secondaryTemplateResolver () {ClassLoaderTemplateResolver secondaryTemplateResolver = new ClassLoaderTemplateResolver (); secondaryTemplateResolver.setPrefix ("predlošci-2 /"); secondaryTemplateResolver.setSuffix (". html"); secondaryTemplateResolver.setTemplateMode (TemplateMode.HTML); secondaryTemplateResolver.setCharacterEncoding ("UTF-8"); secondaryTemplateResolver.setOrder (1); secondaryTemplateResolver.setCheckExistence (true); vrati returnTemplateResolver; }

U našem prilagođenom grahu postavljamo svoj prefiks na sekundarni direktorij predloška koji koristimo: predlošci-2. Također smo postavili CheckExistance zastava do pravi. To je ključ omogućavanja rješavačima rada u lancu.

S ovim konfiguriranim, naša aplikacija može koristiti predloške prema zadanim postavkama glavni / resursi / predlošci imenik i glavni / resursi / predlošci-2.

5. Pogreške

Kada radimo s Thymeleafom, mogli bismo vidjeti ovu pogrešku:

Pogreška u rješavanju predloška [zdravo], predložak možda ne postoji ili mu možda neće pristupiti bilo koji od konfiguriranih rješenja za rješavanje predložaka

Ovu poruku vidimo kad Thymeleaf iz nekog razloga ne može pronaći predložak. Pogledajmo neke od mogućih razloga za to i kako ih popraviti.

5.1. Otipkavanje u kontroleru

Ovu pogrešku često možemo vidjeti zbog jednostavne tipkarske greške. Prvo što treba provjeriti je da se naziv naše datoteke umanjuje za proširenje i predložak koji tražimo u našem kontroleru točno se podudaraju. Ako koristimo poddirektorije, moramo osigurati da su i oni ispravni.

Osim toga, problem može predstavljati problem s određenim operativnim sustavima. Windows ne razlikuje velika i mala slova, ali drugi operativni sustavi jesu. Morali bismo to razmotriti ako sve funkcionira u redu, recimo, na našem lokalnom Windows računalu, ali ne jednom kad ga implementiramo.

5.2. Uključujući ekstenziju datoteke u kontroler

Budući da naše datoteke obično imaju nastavak, može biti prirodno uključiti ih kad vratimo put predloška u kontroler. Majčina dušica automatski dodaje sufiks, pa bismo trebali izbjegavati njegovo davanje.

5.3. Ne koristi zadano mjesto

Ovu ćemo pogrešku vidjeti i ako smo predloške postavili negdje drugdje nego src / main / resources / predlošci. Ako želimo koristiti drugo mjesto, moramo ili postaviti proljeće.thmeleaf.prefiks vlasništvo ili stvorimo vlastiti ClassLoaderTemplateResolver grah za obradu više mjesta.

6. Zaključak

U ovom smo brzom vodiču saznali o mjestima predloška Thymeleaf. Prvo smo vidjeli kako promijeniti zadano mjesto postavljanjem svojstva. Tada smo na tome nadograđivali stvarajući vlastiti ClassLoaderTemplateResolver za upotrebu više lokacija.

Završili smo raspravom o pogrešci koju ćemo vidjeti kad Thymeleaf ne može pronaći naše predloške i kako to riješiti.

Kao i uvijek, primjer koda možete pronaći na GitHubu.