有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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