如何使用Thymeleaf从外部文件夹加载模板

时间:2020-08-10 14:49:06

标签: spring spring-boot thymeleaf

我正在使用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是模板文件名,而参数只是一个映射,该映射具有要由引擎替换的值。

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

注意: 我删除了apply 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));
}

1 个答案:

答案 0 :(得分:1)

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