首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用两个SpringResourceTemplateResolver Beans?

如何使用两个SpringResourceTemplateResolver Beans?
EN

Stack Overflow用户
提问于 2022-11-02 18:04:17
回答 2查看 55关注 0票数 1

由于Thymeleaf 3,Thymeleaf更喜欢使用SpringResourceTemplateResolver (https://www.thymeleaf.org/doc/articles/thymeleaf3migration.html)。所以我决定从ClassLoaderTemplateResolver转到SpringResourceTemplateResolver

代码语言:javascript
运行
复制
@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
        registry.setOrder(1);
    }

    @Bean
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setPrefix("/templates/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode(TemplateMode.HTML);
        resolver.setCharacterEncoding("UTF-8");
        resolver.setOrder(0);
        resolver.setCheckExistence(true);
        return resolver;
    }

    @Bean
    public SpringResourceTemplateResolver templateResolver2() {
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setPrefix("/templates-2/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode(TemplateMode.HTML);
        resolver.setCharacterEncoding("UTF-8");
        resolver.setOrder(1);
        resolver.setCheckExistence(true);
        return resolver;
    }
}

不幸的是,当像这样实现时,我会得到一个错误:Error resolving template [index], template might not exist or might not be accessible by any of the configured Template Resolvers

老实说,我已经简单地用SpringResourceTemplateResolver代替了SpringResourceTemplateResolver,这是可行的。但我只找到了一个处理两个模板位置的工作解决方案,我只找到了使用ClassLoaderTemplateResolvers的过时的示例。

尝试实现Thymeleaf提供的代码片段(如这里所示),在使用两个模板目录时,https://www.thymeleaf.org/doc/articles/thymeleaf3migration.html也不能工作,而且这段代码本身使用的是不推荐的WebMvcConfigurerAdapter。

如何使用具有两个或多个模板位置的Thymeleaf配置Spring应用程序,这些位置还没有完全过时,有什么例子吗?

EN

Stack Overflow用户

发布于 2022-11-02 19:15:55

因此,过了一段时间,许多选拔赛,我终于得到了模板的工作。由于我的问题没有任何像样的答案,我会在网上发布我的解决方案给其他人:

代码语言:javascript
运行
复制
@Configuration
public class ThymeleafConfig implements ApplicationContextAware {

    private ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(@Autowired ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }

    @Bean
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setApplicationContext(this.applicationContext);
        templateResolver.setPrefix("classpath:/templates-1/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setOrder(1);
        templateResolver.setCheckExistence(true); /* FYI: necessary to chain TemplateResolvers */
        templateResolver.setCacheable(false);     /* FYI: during development -> false, so that we can see changes we make */
        return templateResolver;
    }

    @Bean
    public SpringResourceTemplateResolver templateResolver2() {
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setApplicationContext(this.applicationContext);
        templateResolver.setPrefix("classpath:/templates-2/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setOrder(2);
        templateResolver.setCheckExistence(true); /* FYI: necessary to chain TemplateResolvers */
        templateResolver.setCacheable(false);     /* FYI: during development -> false, so that we can see changes we make */
        return templateResolver;
    }

    @Bean
    public SpringTemplateEngine templateEngine() {
        /* SpringTemplateEngine automatically applies SpringStandardDialect and
           enables Spring's own MessageSource message resolution mechanisms. */
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();

        templateEngine.addTemplateResolver(this.templateResolver());
        templateEngine.addTemplateResolver(this.templateResolver2());

        templateEngine.setEnableSpringELCompiler(true);
        return templateEngine;
    }

    @Bean
    public ViewResolver viewResolver() {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(this.templateEngine());
        viewResolver.setCharacterEncoding("UTF-8");
        viewResolver.setCache(false);   /* FYI: during development -> false */
        viewResolver.setOrder(1);
        return viewResolver;
    }
}

我希望这将有助于他人节省时间和神经^^。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74293818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档