6.4.1 配置 Thymeleaf 视图解析器

为了要在 Spring 中使用 Thymeleaf,我们需要配置三个启用 Thymeleaf 与 Spring 集成的 bean:

  • ThymeleafViewResolver:将逻辑视图名称解析为 Thymeleaf 模板视图;

  • SpringTemplateEngine:处理模板并渲染结果;

  • TemplateResolver:加载 Thymeleaf 模板。

如下为声明这些 bean 的 Java 配置。

程序清单 6.4 使用 Java 代码的方式,配置 Spring 对 Thymeleaf 的支持
@Bean
public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
  ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
  viewResolver.setTemplateEngine(templateEngine);
  return viewResolver;
}

@Bean
public SpringTemplateEngine templateEngine(TemplateResolver templateResolver) {
  SpringTemplateEngine templateEngine = new SpringTemplateEngine();
  templateEngine.setTemplateResolver(templateResolver);
  return templateEngine;
}

@Bean
public TemplateResolver templateResolver() {
  TemplateResolver templateResolver = new ServletContextTemplateResolver();
  templateResolver.setPrefix("/WEB-INF/views/");
  templateResolver.setSuffix(".html");
  templateResolver.setTemplateMode("HTML5");
  return templateResolver;
} 

如果你更愿意使用 XML 来配置 bean,那么如下的声明能够完成该任务。

程序清单 6.5 使用 XML 的方式,配置 Spring 对 Thymeleaf 的支持
<bean id="viewResolver" class="org.thymeleaf.spring3.view.ThymeleafViewResolver"
      p:templateEngine-ref="templateEngine" />

<bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine"
      p:templateResolver-ref="templateResolver" />
      
      
<bean id="templateResolver" class="org.thymeleaf.templateResolver.ServletContextTemplateResolver"
      p:prefix="/WEB-INF/templates/"
      p:suffix=".html"
      p:templateMode="HTML5" />

不管使用哪种配置方式,Thymeleaf 都已经准备就绪了,它可以将响应中的模板渲染到 Spring MVC 控制器所处理的请求中。

ThymeleafViewResolver 是 Spring MVC 中 ViewResolver 的一个 实现类。像其他的视图解析器一样,它会接受一个逻辑视图名称,并将其解析为视图。不过在该场景下,视图会是一个 Thymeleaf 模板。

需要注意的是 ThymeleafViewResolver bean 中注入了一个对 Spring-TemplateEngine bean的引用。SpringTemplateEngine 会在 Spring 中启用 Thymeleaf 引擎,用来解析模板,并基于这些模板渲染结果。可以看到,我们为其注入了一个 TemplateResolver bean 的引用。

TemplateResolver 会最终定位和查找模板。与之前配置 InternalResource-ViewResolver 类似,它使用了 prefix 和 suffix 属性。前缀和后缀将会与逻辑视图名组合使用,进而定位 Thymeleaf 引擎。它的 templateMode 属性被设置成了 HTML 5,这表明我们预期要解析的模板会渲染成 HTML 5输出。

所有的 Thymeleaf bean 都已经配置完成了,那么接下来我们该创建几个视图了。

Last updated