Промяна на директорията на шаблони на Thymeleaf в пролетното зареждане

1. Въведение

Thymeleaf е механизъм за шаблони, който можем да използваме за нашите приложения Spring Boot. Както при много неща, Spring Boot осигурява местоположение по подразбиране, където очаква да намери нашите шаблони .

В този кратък урок ще разгледаме как можем да променим местоположението на шаблона. След като направим това, ще научим как да имаме множество местоположения.

2. Настройка

За да използваме Thymeleaf, трябва да добавим подходящия стартер Spring Boot към нашия pom.xml :

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

3. Промяна на местоположението по подразбиране

По подразбиране Spring Boot търси нашите шаблони в src / main / resources / templates . Можем да поставим нашите шаблони там и да ги организираме в поддиректории и нямаме проблеми.

Сега, нека си представим, че имаме изискване всички наши шаблони да се намират в директория, наречена templates-2 .

Нека създадем шаблон за поздрав и го поставим в src / main / resources / templates-2 :

    Enums in Thymeleaf   

Hello from 'templates/templates-2'

Ще ни трябва и контролер:

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

Като премахнем тази основна настройка, нека конфигурираме Spring Boot да използва нашата директория templates-2, като замени свойство в application.properties :

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

Сега, когато се обадим на нашия HelloController , ще видим поздрава си от hello.html .

4. Използване на множество местоположения

Сега, след като научихме как да променим местоположението по подразбиране, нека видим как можем да използваме множество местоположения на шаблони.

За да направите това, нека създадем 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; }

В нашия персонализиран боб задаваме нашия префикс на директорията на вторичния шаблон, която използваме: templates-2. Също така зададохме знамето CheckExistance на true . Това е ключът към разрешаването на преобразувателите да работят във верига.

С тази конфигурация нашето приложение може да използва шаблони от основната директория main / resources / templates и main / resources / templates-2 .

5. Грешки

Когато работим с Thymeleaf, може да видим тази грешка:

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

Виждаме това съобщение, когато Thymeleaf не може да намери шаблона по някаква причина. Нека разгледаме някои от възможните причини за това и как да ги отстраним.

5.1. Печат в контролера

Често можем да видим тази грешка поради проста печатна грешка. Първото нещо, което трябва да проверим е, че името на нашия файл минус разширението и шаблона, който искаме в нашия контролер, съвпадат точно. Ако използваме поддиректории, трябва да се уверим, че и те са правилни.

Освен това проблемът може да е проблем с определени операционни системи. Windows не е чувствителен към малки и големи букви, но други операционни системи са. Трябва да разгледаме това, ако всичко работи добре, да речем, на нашата локална машина с Windows, но не и след като сме внедрили.

5.2. Включване на разширението на файла в контролера

Тъй като нашите файлове обикновено имат разширение, може да бъде естествено да ги включим, когато върнем пътя на шаблона си в контролера. Thymeleaf автоматично добавя суфикса, така че трябва да избягваме предоставянето му .

5.3. Не се използва местоположението по подразбиране

Също така ще видим тази грешка, ако сме поставили нашите шаблони някъде, различно от src / main / resources / templates . Ако искаме да използваме различно местоположение, трябва или да зададем свойството spring.thymeleaf.prefix, или да създадем наш собствен ClassLoaderTemplateResolver боб за обработка на множество местоположения.

6. Заключение

В този бърз урок научихме за местата за шаблони на Thymeleaf. Първо видяхме как да променим местоположението по подразбиране, като зададем свойство. След това надградихме върху това, като създадохме свой собствен ClassLoaderTemplateResolver, за да използваме множество местоположения.

Завършихме дискусия за грешката, която ще видим, когато Thymeleaf не може да намери нашите шаблони и как да го разрешим.

Както винаги, примерният код може да бъде намерен в GitHub.