gpt4 book ai didi

java - Freemarker:从不同位置加载模板

转载 作者:太空宇宙 更新时间:2023-11-04 12:53:30 24 4
gpt4 key购买 nike

我正在尝试从 2 个不同的位置加载 Freemarker 模板。 ftl 文件所在的文件夹是:

/docroot/WEB-INF/src/charts/base
/docroot/WEB-INF/src/charts/tmpl

我有以下带有两种方法的类:

public class TemplateLoader {

public Template loadChartBaseTemplate(String templateName) throws Exception {

String templateFile = String.format("%s.ftl", templateName);

Configuration cfg = new Configuration();
cfg.setClassForTemplateLoading(this.getClass(), "/charts/base/");
Template template = cfg.getTemplate(templateFile);

return template;

}

public Template loadChartTemplate(String fileName) throws Exception {

Configuration cfg = new Configuration();
cfg.setClassForTemplateLoading(this.getClass(), "/charts/tmpl/");
Template template = cfg.getTemplate(fileName);

return template;

}

}

第一种方法正确加载模板。第二种方法返回一个错误,指出“未找到名称的模板”。两个文件夹位于同一级别,我检查了我尝试加载的文件是否存在。

什么可能导致 Freemarker 能够从一个文件夹加载模板,而在另一个文件夹中加载模板失败,因为它们处于同一级别(我尝试使用结尾“/”,没有它,没有区别,行为是相同的)。

还有一个问题:

以下几行返回错误:构造函数 Configuration() 已弃用

Configuration cfg = new Configuration();

我见过的所有文档和示例都是这样的。还有其他方法可以做到这一点吗?

预先感谢您的所有帮助。

最佳答案

这两个目录是否来自不同的 jar-s? FreeMarker 需要一个类作为第一个参数的原因是它将使用该类的定义 ClassLoader 来加载模板。在某些设置中(特别是在 OSGi 下),您必须小心选择来自包含模板的同一个 jar 的类。如果仍然不起作用,为了排除 FreeMarker 可能的原因,您可以尝试是否可以通过 Class.getResourceAsStream(...) 加载所需的模板。

弃用:弃用不是错误。正如弃用消息所述:“改为使用配置(版本)。” FreeMarker 文档也是如此,该文档应作为 FreeMarker 相关信息的主要来源。

关于java - Freemarker:从不同位置加载模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35603520/

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