gpt4 book ai didi

spring - 为单个 Spring Boot 实例配置多个模板解析器

转载 作者:行者123 更新时间:2023-12-05 01:42:48 24 4
gpt4 key购买 nike

我正在尝试配置第二个模板解析器以供 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/

但我又一次只创建了一个解析器。

任何人都知道如何执行此操作或可以看到我做错了什么?

最佳答案

如果你想添加多个解析器,你可以使用 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;
}

}

附言另一方面,如果你想使用 Spring Boot 的自动配置功能,你应该避免手动设置你的配置(就像你在配置类中所做的那样),而只是在 YAML 中定义 Spring Boot 将使用并配置你的属性模板引擎/解析器。如果您手动指定您的配置,spring boot 将不会另外配置 Thymeleaf 引擎/解析器,因此 YAML 属性 w.r.t 您定义的配置将不会被使用,即您基本上覆盖了 spring boots 配置。

关于spring - 为单个 Spring Boot 实例配置多个模板解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50644205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com