【发布时间】:2020-08-10 14:49:06
【问题描述】:
我正在使用 spring boot 和 thymeleaf 从 html 模板生成文档。
随着模板不断变化,我希望 ti 从外部加载模板只是为了从那里添加或删除模板,而不是重新部署应用程序。
作为 POC,使用 /resources 文件夹时可以正常工作。
这是错误:
解析模板“凭证”时出错,模板可能不存在或可能 任何配置的模板解析器都无法访问
这是上下文:
applycation.yml
spring:
thymeleaf:
prefix: file:///${PARAMETERS_DIRECTORY_TEMPLATES:/home/app/templates/}
check-template-location: true
suffix=: .html
mode: HTML
encoding: UTF-8
这是我的方法: 其中 templateName 是模板文件名,parameters 只是一个映射,其中包含要被引擎替换的值。
@Override
public String buildHtmlFromTemplate(String templateName, Map<String, String> parameters) {
TemplateEngine templateEngine = new TemplateEngine();
FileTemplateResolver templateResolver = new FileTemplateResolver ();
templateResolver.setOrder(templateEngine.getTemplateResolvers().size());
templateResolver.setCacheable(false);
templateResolver.setCheckExistence(true);
templateEngine.setTemplateResolver(templateResolver);
return templateEngine.process(templateName, this.resolveHtmlTemplateAttributesContext(parameters));
}
注意: 我删除了应用 yml thymeleaf 配置并实现了下一个代码,但错误仍然存在。
@Override
public String buildHtmlFromTemplate(String templateName, Map<String, String> parameters) {
TemplateEngine templateEngine = new TemplateEngine();
FileTemplateResolver templateResolver = new FileTemplateResolver ();
templateResolver.setPrefix("/home/skeeter/templates/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML");
templateResolver.setOrder(templateEngine.getTemplateResolvers().size());
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setCacheable(false);
templateResolver.setCheckExistence(true);
templateEngine.setTemplateResolver(templateResolver);
return templateEngine.process(templateName, this.resolveHtmlTemplateAttributesContext(parameters));
}
【问题讨论】:
-
这将解决您的请求forum.thymeleaf.org/…
-
感谢@SounakSaha,我已经阅读了这篇文章。我认为我使用了正确的解析器,但无法理解我缺少什么。
-
在 Java 代码中为
FileTemplateResolver设置前缀时,您可以使用简单的文件路径 - 例如,/path/to/templatesDir/- 不使用 URL 样式的file://。我不知道语法是否仅仅因为您使用的是 Spring 的application.yml而不同。尝试注释掉配置文件中的prefix行,并在您的Java 代码中添加templateResolver.setPrefix("/path/to/templatesDir/");作为测试。 -
@andrewjames 我尝试将所有配置移动到代码中,但错误仍然存在
标签: spring spring-boot thymeleaf