De Thymeleaf-sjabloondirectory wijzigen in Spring Boot

1. Inleiding

Thymeleaf is een sjabloonengine die we kunnen gebruiken voor onze Spring Boot-applicaties. Zoals met veel dingen, Spring Boot biedt een standaardlocatie waar het onze sjablonen verwacht te vinden.

In deze korte tutorial gaan we kijken hoe we de sjabloonlocatie kunnen wijzigen. Nadat we dat hebben gedaan, leren we hoe we meerdere locaties kunnen hebben.

2. Installatie

Om Thymeleaf te gebruiken, moeten we de juiste Spring Boot-starter toevoegen aan onze pom.xml:

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

3. De standaardlocatie wijzigen

Spring Boot zoekt standaard naar onze sjablonen in src / main / resources / templates. We kunnen onze sjablonen daar plaatsen en ze ordenen in submappen en hebben geen problemen.

Laten we ons nu eens voorstellen dat we een vereiste hebben dat al onze sjablonen zich in een map met de naam bevinden sjablonen-2.

Laten we een sjabloon maken om hallo te zeggen en deze in te voeren src / main / resources / templates-2:

    Enums in Thymeleaf 

Hallo vanaf 'templates / templates-2'

We hebben ook een controller nodig:

@GetMapping ("/ hallo") public String sayHello () {return "hallo"; }

Met die basisconfiguratie uit de weg, laten we Spring Boot configureren om onze sjablonen-2 directory door een eigenschap in application.properties:

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

Nu, als we onze bellen HalloController, we zien onze begroeting van hallo.html.

4. Meerdere locaties gebruiken

Nu we hebben geleerd hoe we de standaardlocatie kunnen wijzigen, gaan we kijken hoe we meerdere sjabloonlocaties kunnen gebruiken.

Om dit te doen, maken we een ClassLoaderTemplateResolver Boon:

@Bean openbaar ClassLoaderTemplateResolver secundairTemplateResolver () {ClassLoaderTemplateResolver secundairTemplateResolver = nieuw ClassLoaderTemplateResolver (); secundaireTemplateResolver.setPrefix ("templates-2 /"); secundaireTemplateResolver.setSuffix (". html"); secundaireTemplateResolver.setTemplateMode (TemplateMode.HTML); secundaireTemplateResolver.setCharacterEncoding ("UTF-8"); secundaireTemplateResolver.setOrder (1); secundaireTemplateResolver.setCheckExistence (true); geef secundaireTemplateResolver terug; }

In onze aangepaste bean stellen we ons voorvoegsel in op de secundaire sjabloondirectory die we gebruiken: sjablonen-2. We hebben ook de CheckExistance vlag naar waar. Dit is de sleutel om de resolvers in een keten te laten opereren.

Als dit is geconfigureerd, kan onze applicatie standaard sjablonen gebruiken main / resources / sjablonen directory en main / resources / templates-2.

5. Fouten

Wanneer we met Thymeleaf werken, kunnen we deze fout zien:

Fout bij het oplossen van sjabloon [hallo], sjabloon bestaat mogelijk niet of is mogelijk niet toegankelijk voor een van de geconfigureerde sjabloonoplossers

We zien dit bericht wanneer Thymeleaf de sjabloon om de een of andere reden niet kan vinden. Laten we eens kijken naar enkele van de mogelijke redenen hiervoor en hoe u deze kunt oplossen.

5.1. Typefout in de controller

We zien deze fout vaak als gevolg van een simpele typefout. Het eerste dat u moet controleren, is dat onze bestandsnaam minus de extensie en de sjabloon waar we om vragen in onze controller exact overeenkomen. Als we submappen gebruiken, moeten we ervoor zorgen dat deze ook correct zijn.

Bovendien kan het probleem een ​​probleem zijn met bepaalde besturingssystemen. Windows is niet hoofdlettergevoelig, maar andere besturingssystemen wel. We moeten dit onderzoeken of alles goed werkt, bijvoorbeeld op onze lokale Windows-machine, maar niet als we eenmaal zijn geïmplementeerd.

5.2. Inclusief de bestandsextensie in de controller

Omdat onze bestanden doorgaans een extensie hebben, kan het logisch zijn om ze op te nemen wanneer we ons sjabloonpad in de controller retourneren. Thymeleaf voegt automatisch het achtervoegsel toe, dus we moeten het niet opgeven.

5.3. De standaardlocatie niet gebruiken

We zullen deze fout ook zien als we onze sjablonen ergens anders hebben geplaatst dan src / main / resources / templates. Als we een andere locatie willen gebruiken, moeten we ofwel de spring.thymeleaf.prefix eigendom of creëer onze eigen ClassLoaderTemplateResolver bean om meerdere locaties te verwerken.

6. Conclusie

In deze korte tutorial hebben we geleerd over Thymeleaf-sjabloonlocaties. Eerst hebben we gezien hoe we de standaardlocatie kunnen wijzigen door een eigenschap in te stellen. Vervolgens hebben we daarop voortgebouwd door onze eigen te creëren ClassLoaderTemplateResolver om meerdere locaties te gebruiken.

We sloten af ​​met een bespreking van de fout die we zullen zien wanneer Thymeleaf onze sjablonen niet kan vinden en hoe we deze kunnen oplossen.

Zoals altijd is de voorbeeldcode te vinden op GitHub.


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