Spring Boot Thymeleaf:无法从资源/模板下的子文件夹中提取模板

时间:2019-07-10 10:28:20

标签: java spring-boot thymeleaf

我正在使用Thymeleaf v3.0.11.RELEASE Spring Boot v2.1.3.RELEASE,并且我的模板放在classpath:templates / folder1 / folder2 /下时遇到了问题。

我尝试了以下方法

  • 将属性spring.thymeleaf.prefix设置为classpath:/templates/**/classpath:/templates/*和其他类似模式
  • 试图在应用程序启动类中添加模板解析器。

    @Bean
    public TemplateEngine emailTemplateEngine() {
        final SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.addTemplateResolver(htmlTemplateResolver());
        return templateEngine;
    }
    
    private ITemplateResolver htmlTemplateResolver() {
        final ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
        templateResolver.setResolvablePatterns(Collections.singleton("/*"));
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setCacheable(false);
        return templateResolver;
    

    }

这些方法不起作用,我仍然遇到错误:

"Error resolving template [template_name], template might not exist or might not be accessible by any of the configured Template Resolvers"

我想念什么吗?我只需要知道为后缀启用通配符的方法即可。

注意:如果我对classpath:templates/folder1/folder2进行硬编码,它可以工作,但是由于将有多个文件夹,并且我不想固定所有文件夹名称,所以不能。

1 个答案:

答案 0 :(得分:0)

在您的应用中添加以下配置类

@Configuration
public class ThymeleafConfig {

  @Bean
  public SpringTemplateEngine springTemplateEngine() {
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    templateEngine.addTemplateResolver(htmlTemplateResolver());
    return templateEngine;
  }

  @Bean
  public SpringResourceTemplateResolver htmlTemplateResolver() {
    SpringResourceTemplateResolver templateResolver =
        new SpringResourceTemplateResolver();
    templateResolver.setPrefix("classpath:/templates/");
    templateResolver.setSuffix(".html");
    templateResolver.setTemplateMode(
        StandardTemplateModeHandlers.HTML5.getTemplateModeName());
    templateResolver.setCharacterEncoding(StandardCharsets.UTF_8.name());
    return templateResolver;
  }

}