Ker*_*rry 3 spring thymeleaf spring-boot
我正在尝试配置 Thymeleaf 使用的第二个模板解析器。我还想要在文件夹下查找的默认解析器templates,但无论我尝试什么,最终都只会得到一个解析器。
在我的项目中已经有一个 yaml 配置文件,其中包含:
thymeleaf:
mode: LEGACYHTML5
cache: false
Run Code Online (Sandbox Code Playgroud)
作为第一步,我尝试添加一个配置 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;
}
}
Run Code Online (Sandbox Code Playgroud)
但我从未在 中看到第二个解析器org.thymeleaf.TemplateRepository,只是默认的。
我进一步尝试使用以下内容修改 YAML 文件:
thymeleaf:
-
mode: LEGACYHTML5
cache: false
prefix: classpath:/public/
-
mode: LEGACYHTML5
cache: false
prefix: classpath:/templates/
Run Code Online (Sandbox Code Playgroud)
但我再次只创建了一个解析器。
任何人都知道如何做到这一点或者可以看到我做错了什么?
小智 6
如果您想添加多个解析器,您可以使用engine.addTemplateResolver代替engine.setTemplateResolver()或使用setTemplateResolvers()which 接受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;
}
}
Run Code Online (Sandbox Code Playgroud)
PS 另一方面,如果您想使用 Spring boot 的自动配置功能,您应该避免手动设置配置(就像您在配置类中所做的那样),而只需在 YAML 中定义 Spring Boot 将使用并配置的属性您的模板引擎/解析器。如果您手动指定配置,Spring Boot 将不会额外配置 Thymeleaf 引擎/解析器,因此您定义的配置的 YAML 属性将不会被使用,即您基本上覆盖了 Spring Boot 配置。
| 归档时间: |
|
| 查看次数: |
4607 次 |
| 最近记录: |