Thymeleaf如何配置多个模板解析器

Viewed 21

我有一个单体项目,项目本体的模板在resources/templates里,还有一些用户要上传自己的自定义页面,上传到项目的其他目录里,该如何配置来解析这俩目录里的模板呀?

2 Answers

问题很简单,Thymeleaf支持配置多个模板解析器,方法如下:

修改配置类:

@Configuration
public class TemplateResolverConfiguration {
    @Bean
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        //设置第一个解析器的prefix,也就是我们读取模板的目录,这里对应代码里的resources/templates目录
        templateResolver.setPrefix("classpath:/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setCacheable(false);
        templateResolver.setTemplateMode("HTML5");
        templateResolver.setCharacterEncoding("UTF-8");
        //设置模板解析器优先级,如果出现同名模板文件,按照优先级顺序来,0是最高优先级
        templateResolver.setOrder(0);
        //(必须)在源模板文件不在当前解析器的路径中时切换解析器,意思就是第一个解析器没找到文件,切换下一个解析器,直到找到了模板文件
        templateResolver.setCheckExistence(true);
        return templateResolver;
    }

    @Bean
    public FileTemplateResolver secondTemplateResolver() {
        FileTemplateResolver templateResolver = new FileTemplateResolver();
        templateResolver.setPrefix("pages/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setOrder(1);
        templateResolver.setCheckExistence(true);

        return templateResolver;
    }
}

这样就可以在系统模板找不到时,去找第二个解析器里的模板了。