Modifica della directory dei modelli di foglia di timo in Spring Boot

1. Introduzione

Thymeleaf è un motore di modelli che possiamo utilizzare per le nostre applicazioni Spring Boot. Come per molte cose, Spring Boot fornisce una posizione predefinita in cui si aspetta di trovare i nostri modelli .

In questo breve tutorial, vedremo come cambiare la posizione del modello. Dopo averlo fatto, impareremo come avere più sedi.

2. Configurazione

Per utilizzare Thymeleaf, dobbiamo aggiungere l'appropriato Spring Boot Starter al nostro pom.xml :

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

3. Modifica della posizione predefinita

Per impostazione predefinita, Spring Boot cerca i nostri modelli in src / main / resources / templates . Possiamo mettere i nostri modelli lì e organizzarli in sottodirectory e non abbiamo problemi.

Ora, immaginiamo di avere un requisito che tutti i nostri modelli risiedano in una directory chiamata templates-2 .

Creiamo un modello per salutare e inseriamolo in src / main / resources / templates-2 :

    Enums in Thymeleaf   

Hello from 'templates/templates-2'

Avremo anche bisogno di un controller:

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

Con quella configurazione di base fuori mano, configuriamo Spring Boot per utilizzare la nostra directory templates-2 sovrascrivendo una proprietà in application.properties :

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

Ora, quando chiamiamo il nostro HelloController , vedremo il nostro saluto da hello.html .

4. Utilizzo di più posizioni

Ora che abbiamo imparato come modificare la posizione predefinita, vediamo come possiamo utilizzare più posizioni dei modelli.

Per fare ciò, creiamo un bean ClassLoaderTemplateResolver :

@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; }

Nel nostro bean personalizzato, impostiamo il nostro prefisso sulla directory del modello secondario che stiamo utilizzando: templates-2. Abbiamo anche impostato il flag CheckExistance su true . Questa è la chiave per consentire ai resolver di operare in una catena.

Con questa configurazione, la nostra applicazione può utilizzare i modelli dal default risorse / / templates principale directory e principali / risorse / templates-2 .

5. Errori

Quando lavoriamo con Thymeleaf, potremmo visualizzare questo errore:

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

Vediamo questo messaggio quando Thymeleaf non riesce a individuare il modello per qualche motivo. Diamo un'occhiata ad alcune delle possibili ragioni per questo e come risolverle.

5.1. Errore di battitura nel controller

Spesso possiamo vedere questo errore a causa di un semplice errore di battitura. La prima cosa da controllare è che il nome del nostro file meno l'estensione e il modello che stiamo chiedendo nel nostro controller corrispondano esattamente. Se stiamo usando le sottodirectory, dobbiamo assicurarci che anche quelle siano corrette.

Inoltre, il problema può essere un problema con alcuni sistemi operativi. Windows non distingue tra maiuscole e minuscole, ma lo sono altri sistemi operativi. Dovremmo esaminarlo se tutto funziona correttamente, ad esempio, sulla nostra macchina Windows locale, ma non una volta che abbiamo distribuito.

5.2. Compresa l'estensione del file nel controller

Poiché i nostri file in genere hanno un'estensione, può essere naturale includerli quando restituiamo il percorso del modello nel controller. Thymeleaf aggiunge automaticamente il suffisso, quindi dovremmo evitare di fornirlo .

5.3. Non utilizzando la posizione predefinita

Vedremo anche questo errore se abbiamo posizionato i nostri modelli in un posto diverso da src / main / resources / templates . Se vogliamo utilizzare una posizione diversa, dobbiamo impostare la proprietà spring.thymeleaf.prefix o creare il nostro bean ClassLoaderTemplateResolver per gestire più posizioni.

6. Conclusione

In questo breve tutorial, abbiamo imparato a conoscere le posizioni dei modelli Thymeleaf. Innanzitutto, abbiamo visto come modificare la posizione predefinita impostando una proprietà. Quindi ci siamo basati su questo creando il nostro ClassLoaderTemplateResolver per utilizzare più posizioni.

Abbiamo concluso con una discussione sull'errore che vedremo quando Thymeleaf non riesce a trovare i nostri modelli e su come risolverlo.

Come sempre, il codice di esempio può essere trovato su GitHub.