我正在尝试配置Thymeleaf使用的第二个模板解析器。我也想要一个默认的解析器,它位于templates
文件夹下,但无论我尝试什么,我最终只能得到一个解析器。
在我的项目中,已经有一个yaml配置文件,其中包含:
thymeleaf:
mode: LEGACYHTML5
cache: false
作为第一步,我尝试添加配置bean:
@Configuration
@EnableWebMvc
public class ThymeleafConfiguration extends WebMvcConfigurerAdapter implements ApplicationContextAware
{
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException
{
this.applicationContext = applicationContext;
}
@Bean
public TemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(templateResolver());
return engine;
}
private ITemplateResolver templateResolver() {
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
resolver.setApplicationContext(applicationContext);
resolver.setPrefix("/public/");
resolver.setTemplateMode("HTML");
return resolver;
}
}
但我从未在org.thymeleaf.TemplateRepository
中看到第二个解析器,只是默认设置。
我进一步尝试使用以下内容来扩展YAML文件:
thymeleaf:
-
mode: LEGACYHTML5
cache: false
prefix: classpath:/public/
-
mode: LEGACYHTML5
cache: false
prefix: classpath:/templates/
但我再次创建了一个解析器。
任何人都知道怎么做或者能看出我做错了什么?
答案 0 :(得分:2)
如果您想添加多个解析器,可以使用engine.addTemplateResolver
代替engine.setTemplateResolver()
,或使用setTemplateResolvers()
来获取Set
。
@Configuration
@EnableWebMvc
public class ThymeleafConfiguration extends WebMvcConfigurerAdapter implements ApplicationContextAware
{
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException
{
this.applicationContext = applicationContext;
}
@Bean
public TemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.addTemplateResolver(templateResolverPublic());
engine.addTemplateResolver(templateResolverTemplates());
return engine;
}
private ITemplateResolver templateResolverPublic() {
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
resolver.setApplicationContext(applicationContext);
resolver.setPrefix("/public/");
resolver.setTemplateMode("HTML");
return resolver;
}
private ITemplateResolver templateResolverTemplates() {
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
resolver.setApplicationContext(applicationContext);
resolver.setPrefix("/templates/");
resolver.setTemplateMode("HTML");
return resolver;
}
}
P.S。另一方面,如果您想使用Spring启动的自动配置功能,则应该避免手动设置配置(就像在配置类中那样),而只是在YAML中定义Spring Boot将使用的属性,并将配置您的模板引擎/解析器。如果手动指定配置弹簧启动,则不会另外配置Thymeleaf引擎/解析器,因此不会使用YAML属性w.r.t您定义的配置,即基本上覆盖弹簧靴配置。