我将现有应用程序迁移到Spring 5.0.0.M3& Spring Boot 2.0.0.M3。使用Spring Boot,我也可以导入Thymeleaf启动器。
该应用程序有2个模板文件夹mails
和templates
。如果我为电子邮件模板指定以下配置,则忽略templates
文件夹;例如我在此文件夹中获取了FileNotFoundException
个模板。
@Configuration
public class ThymeleafConfiguration {
@SuppressWarnings("unused")
private final Logger log = LoggerFactory.getLogger(ThymeleafConfiguration.class);
@Bean
@Description("Thymeleaf template resolver serving HTML 5 emails")
public ClassLoaderTemplateResolver emailTemplateResolver() {
ClassLoaderTemplateResolver emailTemplateResolver = new ClassLoaderTemplateResolver();
emailTemplateResolver.setPrefix("mails/");
emailTemplateResolver.setSuffix(".html");
emailTemplateResolver.setTemplateMode("HTML5");
emailTemplateResolver.setCharacterEncoding(CharEncoding.UTF_8);
emailTemplateResolver.setOrder(1);
return emailTemplateResolver;
}
}
我已尝试将setOrder
参数设置为2,10等,这没有任何区别。如果我删除了解析程序方法,则会识别templates
文件夹,但mails
文件夹不是。
有什么想法可能会发生什么?
答案 0 :(得分:1)
据我所知,您在 resources 文件夹下有邮件和模板子文件夹。
您可以在 ClassLoaderTemplateResolver 中添加 resource 文件夹作为前缀。然后为邮件和模板子文件夹添加 ResourceHandler 。
<强> ClassLoaderTemplateResolver
@Bean
@Description("Thymeleaf template resolver serving HTML 5 emails")
public ClassLoaderTemplateResolver emailTemplateResolver() {
ClassLoaderTemplateResolver emailTemplateResolver = new
ClassLoaderTemplateResolver();
emailTemplateResolver.setPrefix("resources/");
emailTemplateResolver.setSuffix(".html");
emailTemplateResolver.setTemplateMode("HTML5");
emailTemplateResolver.setCharacterEncoding(CharEncoding.UTF_8);
emailTemplateResolver.setOrder(1);
return emailTemplateResolver;
}
将您的ResourceHandler方法放在您的应用程序类中,该类已使用 @SpringBootApplication 进行注释。
<强> ResourceHandler
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!registry.hasMappingForPattern("/mails/**")) {
registry.addResourceHandler("/mails/**").addResourceLocations("classpath:/resources/mails/");
}
if (!registry.hasMappingForPattern("/templates/**")) {
registry.addResourceHandler("/templates/**").addResourceLocations("classpath:/resources/templates/");
}
}
当您从任何方法返回视图名称时,它可能类似于:
return "mails/page1";
或
return "templates/page2";