gpt4 book ai didi

java - Thymeleaf ClassLoaderTemplateResolver 找不到电子邮件模板,但只能在 linux 上找到

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:23:07 25 4
gpt4 key购买 nike

我们目前正在将 Thymeleaf 用于 Spring MVC 网站。最近,我们决定用它来处理丰富的 HTML 电子邮件模板。我按照这里的例子:http://www.thymeleaf.org/doc/springmail.html .

ClassLoaderTemplateResolver 的前缀为“email/”,模板存储在“src/main/resources/”下的“email”子文件夹中,这似乎是它寻找它们的地方。

在我使用 Windows 7/Tomcat7/Eclipse 的开发机器上一切正常,但当我将 .war 文件发布到 Amazon 的 EC2(Linux 环境/Tomcat7)并尝试生成电子邮件时失败。这是错误:

ERROR C: U: org.thymeleaf.TemplateEngine - [THYMELEAF][pool-2-thread-2] Exception processing template "email_template.html": Resource resolution by ServletContext with org.thymeleaf.resourceresolver.ServletContextResourceResolver can only be performed when context implements org.thymeleaf.context.IWebContext [current context: org.thymeleaf.context.Context]

如果我从/src/main/resources/email 中删除/重命名模板,我可以在我的 Windows 开发机器上收到此错误消息,所以我假设 ClassLoaderTemplateResolver 找不到模板,然后找不到模板引擎尝试无法使用的 ServletContextResourceResolver,因为它没有 WebContext。

基于 java 的配置如下所示:

@Bean
public ServletContextTemplateResolver templateResolver() {
final ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
resolver.setPrefix("/WEB-INF/templates/");
resolver.setTemplateMode("HTML5");
resolver.setCharacterEncoding(appSettings.getDefaultEncoding());
resolver.setOrder(2);
resolver.setCacheable(!appSettings.isDebugMode() || !appSettings.isOneBoxMode());
return resolver;
}

@Bean ClassLoaderTemplateResolver emailTemplateResolver() {
final ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
resolver.setPrefix("email/");
resolver.setTemplateMode("HTML5");
resolver.setCharacterEncoding(appSettings.getDefaultEncoding());
resolver.setOrder(1);
return resolver;
}

@Bean
public SpringTemplateEngine templateEngine() {
final SpringTemplateEngine engine = new SpringTemplateEngine();
final Set<TemplateResolver> templateResolvers = new HashSet<TemplateResolver>();
templateResolvers.add(templateResolver());
templateResolvers.add(emailTemplateResolver());
engine.setTemplateResolvers(templateResolvers);
return engine;
}

生成电子邮件的代码如下所示:

final String template = "email_template.html";

// prepare the context
final Context ctx = new Context(LocaleContextHolder.getLocale());

// create the body using ThymeLeaf
final String htmlContent = templateEngine.process(template, ctx);

奇怪的是,我看到了带有“/META-INF/templates”前缀的 ClassLoaderTemplateResolver 示例和类似的示例。路径不是必须在“src/main/resources”下而不是“/src/main/webapp”下吗?我也尝试用 FileTemplateResolver 替换它,但无论我尝试什么,我都无法弄清楚将模板文件放在哪里以及将前缀设置到什么路径。

我的 Windows 开发机器和亚马逊的 Linux 机器有什么不同?起初,我认为文件路径的区分大小写可能是罪魁祸首,但我排除了这种可能性。帮助!

最佳答案

annnnnnnd 我是个白痴...我在存储电子邮件模板的文件夹名称和电子邮件模板名称之间有一个反斜杠,例如“folder\template.html”,而不是“folder/template.html”。这适用于 Windows,但不适用于 Linux。

关于java - Thymeleaf ClassLoaderTemplateResolver 找不到电子邮件模板,但只能在 linux 上找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26186464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com