spring - 如何使用 Thymeleaf 从外部文件夹加载模板
问题描述
我正在使用 spring boot 和 thymeleaf 从 html 模板生成文档。
随着模板不断变化,我希望 ti 从外部加载模板只是为了从那里添加或删除模板,而不是重新部署应用程序。
作为 POC,使用 /resources 文件夹时可以正常工作。
这是错误:
解析模板“凭证”时出错,该模板可能不存在或可能无法被任何已配置的模板解析器访问
这是上下文:
应用程序.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));
}
解决方案
0
奇怪的是,使用此代码和使用 sudo 创建的 /usr/app/templates 解决了这个问题。我认为这只是一个权限问题
.....
@Value("${parameters.directory.templates}")
private String templatesDirectory;
.....
@Override
public String buildHtmlFromTemplate(String templateName, Map<String, String> parameters) {
TemplateEngine templateEngine = new TemplateEngine();
FileTemplateResolver templateResolver = new FileTemplateResolver ();
templateResolver.setPrefix(templatesDirectory);
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));
}
推荐阅读
- c# - 如何修复“客户端身份验证方案‘匿名’禁止 HTTP 请求”
- docker - kitura docker错误检查上下文:'无法统计'/home/conor/workspace/UserInstruction/.build-ubuntu/checkouts''
- linux - 如何使用 SendGrid 的 SMTP API 使用 curl 命令从 bash 脚本发送简单的 HTML 文件?
- excel - Apache POI,公式真假
- python - 为什么我在进行预测时从 ARIMA 模型中得到几乎相同的结果?
- swift - 如何在 SwiftUI 中使用 URL 显示 Google Place Photos?
- sql-server - SQL Server 2012,UnionAggregate 缺少 Z 和 M
- vimeo - 使用 Vimeo API 获取实时事件的日期
- javascript - 我需要在 Angular 应用程序中使用加载器吗?
- javascript - Am 图表 v3 XY 不适用于对数刻度