java - Spring TemplateEngine 及其子目录

标签 java spring

我对 TemplateEngine 有疑问。

我有邮件模板解析器,它根据名称填充 thymeleaf 模板。当我不指定子目录时它效果很好。方法如下:

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);
}

并且它工作正常。但是当我将模板移动到名为邮件的子目录并将返回行更改为

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

然后它就停止工作了。现在我有异常(exception):

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 Controller 中运行良好,例如当我想返回驻留在子目录中的页面模板时。

我做错了什么?

最佳答案

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;
}

关于java - Spring TemplateEngine 及其子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53686381/

相关文章:

java - tomcat不显示图像

java - Spark作业失败,因为它找不到hadoop core-site.xml

java - [java.lang.ArrayIndexOutOfBoundsException : Index 2 out of bounds for length 2]

java - 测试 Spring Boot 存储库时不会引发预期的异常

java - Spring Boot 2.1 bean 覆盖与 Primary

java - Spring MVC 多行表单提交提交新的 ModelAttribute

java - 在实体的成员变量或 get 方法处设置 JPA 注释?

java - 未在 Storm UI 中创建 Storm 拓扑

java - 字符串 setter 的 Spring AOP 切入点定义

spring data jpa规范join fetch不起作用