Статьи

Thymeleaf 3 — быстро начинайте работу с Thymeleaf 3 и Spring MVC

Выпуск Thymeleaf 3. В новой версии появилось множество новых функций, таких как поддержка HTML5, а также поддержка текстовых шаблонов без разметки — [# th:utext="${thymeleaf.version}" /] , улучшенные встроенные возможности — <p>Thymeleaf [[${thymeleaf.version}]] is great!</p> , улучшения производительности и многое другое.

Самый простой способ начать работу с Thymeleaf 3 и Spring MVC — использовать Spring MVC 4 Quickstart Maven Archetype . Архетип был обновлен для поддержки Thymeleaf 3. Изменения, внесенные в архетип, описаны ниже.

зависимости

Проект использует Spring Platform BOM для управления зависимостями, но еще не (на момент написания этого поста) объявлял зависимость от Thymeleaf 3, поэтому мне нужно было объявлять версии вручную.

  • Thymeleaf:
1
2
3
4
5
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.0.0.RELEASE</version>
</dependency>
  • Тимелист весенний 4:
1
2
3
4
5
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring4</artifactId>
    <version>3.0.0.RELEASE</version>
</dependency>
  • Thymeleaf Spring Security 4:
1
2
3
4
5
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity4</artifactId>
    <version>3.0.0.RELEASE</version>
</dependency>

Приложение, созданное с помощью архетипа, использует Java 8 Time Dialect, и, поскольку API Thymeleaf изменился, зависимость от диалекта также должна быть обновлена. Прежде чем он станет доступен в Maven Central, мы должны добавить репозиторий снимков в POM:

1
2
3
4
5
6
7
8
<repository>
    <id>sonatype-nexus-snapshots</id>
    <name>Sonatype Nexus Snapshots</name>
    <snapshots>
        <enabled>true</enabled>
    </snapshots>
</repository>

А затем объявите зависимость:

1
2
3
4
5
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-java8time</artifactId>
    <version>3.0.0-SNAPSHOT</version>
</dependency>

Изменения конфигурации

  • Шаблон разрешения

Шаблон разрешения до:

1
2
3
4
5
6
7
8
9
@Bean
public TemplateResolver templateResolver() {
   TemplateResolver resolver = new ServletContextTemplateResolver();
   resolver.setPrefix(VIEWS);
   resolver.setSuffix(".html");
   resolver.setTemplateMode("HTML5");
   resolver.setCacheable(false);
   return resolver;
}

Шаблон разрешения после:

1
2
3
4
5
6
7
8
9
@Bean
public ITemplateResolver templateResolver() {
    SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
    resolver.setPrefix(VIEWS);
    resolver.setSuffix(".html");
    resolver.setTemplateMode(TemplateMode.HTML);
    resolver.setCacheable(false);
    return resolver;
}
  • Шаблонный движок
1
2
3
4
5
6
7
8
@Bean
public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    templateEngine.setTemplateResolver(templateResolver());
    templateEngine.addDialect(new SpringSecurityDialect());
    templateEngine.addDialect(new Java8TimeDialect());
    return templateEngine;
}
  • Просмотр резолвера:
1
2
3
4
5
6
7
@Bean
public ViewResolver viewResolver() {
    ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
    thymeleafViewResolver.setTemplateEngine(templateEngine());
    thymeleafViewResolver.setCharacterEncoding("UTF-8");
    return thymeleafViewResolver;
}

Шаблоны

Шаблоны не изменились в этом проекте. Но если вы переносите реальный проект, вам может быть интересно прочитать руководство по миграции.

использованная литература