首页 文章

Spring TemplateEngine和子目录

提问于
浏览
0

我有TemplateEngine的问题 .

我有邮件模板解析器,根据名称填写百里香模板 . 当我没有指定子目录时它很好用 . 方法如下所示:

private String getMailFromTemplate(MailMessage message) {
    Map<String, Object> objMap = new HashMap<>();
    objMap.putAll(message.getContext());

    Context context = new Context(message.getLocale(), objMap);
    return templateEngine.process(message.getTemplate().getName(), context);
}

它工作正常 . 但是,当我将模板移动到子菜单调用mail并将返回行更改为

return templateEngine.process("mail/" + message.getTemplate().getName(), context);

然后它停止了工作 . 现在我有例外:

org.thymeleaf.exceptions.TemplateInputException: Error resolving template [start], template might not exist or might not be accessible by any of the configured Template Resolvers (template: "mail/register" - line 1, col 6)

我也试过“/ mail /”但没有成功 .

奇怪的是它在MVC控制器中运行良好,例如我想返回驻留在子目录中的页面模板 .

我做错了什么?

1 回答

  • 1

    TemplateEngine配置为使用特定目录中的模板,当您尝试处理模板时,它会期望将其名称作为参数传递,因此“mail / register”是一个名称 .

    您可以将templateEngine配置为从子目录中读取模板,如下所示:

    @Bean
    public ServletContextTemplateResolver templateResolver() {
        ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
        templateResolver.setPrefix("/WEB-INF/views/mail/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode("HTML5");
    
        return templateResolver;
    }
    
    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        templateEngine.setTemplateEngineMessageSource(messageSource());
        return templateEngine;
    }
    

相关问题