Spring TemplateEngine和子目录

时间:2018-12-08 19:53:43

标签: java spring

我在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 个答案:

答案 0 :(得分: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;
}