Рубрики
Без рубрики

Изменение каталога шаблонов Thymeleaf в весенней загрузке

Узнайте о расположениях шаблонов Thymeleaf.

Автор оригинала: Amy DeGregorio.

1. введение

Thymeleaf – это механизм шаблонов, который мы можем использовать для наших приложений Spring Boot|/. Как и во многих других случаях, Spring Boot предоставляет местоположение по умолчанию, в котором он ожидает найти наши шаблоны .

В этом коротком уроке мы рассмотрим, как мы можем изменить расположение шаблона. После того, как мы это сделаем, мы узнаем, как иметь несколько местоположений.

2. Настройка

Чтобы использовать Thymeleaf, нам нужно добавить соответствующий стартер весенней загрузки в ваш 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:

@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. Мы также устанавливаем флаг Check Existence на 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 .