Ändern des Thymeleaf-Vorlagenverzeichnisses im Spring Boot

1. Einleitung

Thymeleaf ist eine Template-Engine, die wir für unsere Spring Boot-Anwendungen verwenden können. Wie bei vielen Dingen bietet Spring Boot einen Standardspeicherort, an dem unsere Vorlagen erwartet werden .

In diesem kurzen Tutorial werden wir uns ansehen, wie wir den Speicherort der Vorlage ändern können. Danach lernen wir, wie man mehrere Standorte hat.

2. Setup

Um Thymeleaf verwenden zu können, müssen wir unserer pom.xml den entsprechenden Spring Boot-Starter hinzufügen :

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

3. Ändern des Standardspeicherorts

Standardmäßig sucht Spring Boot in src / main / resources / templates nach unseren Vorlagen . Wir können unsere Vorlagen dort ablegen und in Unterverzeichnissen organisieren und haben keine Probleme.

Stellen wir uns nun vor, wir müssen alle unsere Vorlagen in einem Verzeichnis namens templates-2 speichern .

Erstellen wir eine Vorlage, um Hallo zu sagen, und fügen Sie sie in src / main / resources / templates-2 ein :

    Enums in Thymeleaf   

Hello from 'templates/templates-2'

Wir brauchen auch einen Controller:

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

Nachdem diese Grundeinstellung aus dem Weg geräumt ist, konfigurieren wir Spring Boot so, dass unser Templates-2- Verzeichnis verwendet wird, indem eine Eigenschaft in application.properties überschrieben wird :

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

Wenn wir jetzt unseren HelloController aufrufen , sehen wir unsere Begrüßung von hello.html .

4. Verwenden mehrerer Standorte

Nachdem wir nun gelernt haben, wie Sie den Standardspeicherort ändern, wollen wir sehen, wie wir mehrere Vorlagenpositionen verwenden können.

Erstellen Sie dazu eine ClassLoaderTemplateResolver- Bean:

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

In unserer benutzerdefinierten Bean setzen wir unser Präfix auf das von uns verwendete sekundäre Vorlagenverzeichnis: templates-2. Wir setzen auch das CheckExistance- Flag auf true . Dies ist der Schlüssel, damit die Resolver in einer Kette arbeiten können.

Mit dieser Konfiguration kann unsere Anwendung Vorlagen aus dem Standardverzeichnis main / resources / templates und main / resources / templates-2 verwenden .

5. Fehler

Wenn wir mit Thymeleaf arbeiten, wird möglicherweise folgender Fehler angezeigt:

Error resolving template [hello], template might not exist or might not be accessible by any of the configured Template Resolvers

Wir sehen diese Meldung, wenn Thymeleaf die Vorlage aus irgendeinem Grund nicht finden kann. Schauen wir uns einige der möglichen Gründe dafür an und wie man sie behebt.

5.1. Tippfehler im Controller

Wir können diesen Fehler oft aufgrund eines einfachen Tippfehlers sehen. Als erstes muss überprüft werden, ob unser Dateiname abzüglich der Erweiterung und der Vorlage, nach der wir in unserem Controller fragen, genau übereinstimmen. Wenn wir Unterverzeichnisse verwenden, müssen wir sicherstellen, dass diese ebenfalls korrekt sind.

Darüber hinaus kann das Problem bei bestimmten Betriebssystemen auftreten. Windows unterscheidet nicht zwischen Groß- und Kleinschreibung, andere Betriebssysteme jedoch. Wir sollten dies prüfen, wenn beispielsweise auf unserem lokalen Windows-Computer alles einwandfrei funktioniert, aber nicht nach der Bereitstellung.

5.2. Einfügen der Dateierweiterung in den Controller

Da unsere Dateien normalerweise eine Erweiterung haben, kann es natürlich sein, sie einzuschließen, wenn wir unseren Vorlagenpfad in den Controller zurückgeben. Thymeleaf hängt das Suffix automatisch an, daher sollten wir es vermeiden, es anzugeben .

5.3. Den Standardspeicherort nicht verwenden

Dieser Fehler wird auch angezeigt, wenn wir unsere Vorlagen an einem anderen Ort als src / main / resources / templates platziert haben . Wenn wir einen anderen Speicherort verwenden möchten, müssen wir entweder die Eigenschaft spring.thymeleaf.prefix festlegen oder eine eigene ClassLoaderTemplateResolver- Bean erstellen , um mehrere Speicherorte zu verarbeiten.

6. Fazit

In diesem kurzen Tutorial haben wir die Speicherorte von Thymeleaf-Vorlagen kennengelernt. Zuerst haben wir gesehen, wie der Standardspeicherort durch Festlegen einer Eigenschaft geändert wird. Darauf aufbauend haben wir unseren eigenen ClassLoaderTemplateResolver erstellt , um mehrere Speicherorte zu verwenden.

Wir haben eine Diskussion über den Fehler abgeschlossen, den wir sehen werden, wenn Thymeleaf unsere Vorlagen nicht finden kann und wie man ihn löst.

Der Beispielcode ist wie immer auf GitHub zu finden.