Freemarker:从不同位置加载模板
Freemarker: Loading templates from different locations
我正在尝试从 2 个不同的地方加载 Freemarker 的模板。 ftl文件所在的文件夹是:
/docroot/WEB-INF/src/charts/base
/docroot/WEB-INF/src/charts/tmpl
我有以下 class 和 2 种方法:
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;
}
}
第一种方法正确加载模板。第二种方法 return 是一个错误 "Template not found for name "。两个文件夹都在同一级别,我检查了我要加载的文件是否存在。
什么可能导致 Freemarker 能够从一个文件夹加载模板而无法从另一个文件夹加载模板,因为它们处于同一级别(我尝试使用结尾“/”和没有它,但没有区别,行为是一样的)。
另外一个问题:
以下几行return错误:构造函数Configuration()已弃用
Configuration cfg = new Configuration();
我看到的所有文档和例子都是这样的。还有其他方法吗?
在此先感谢您的帮助。
这两个目录是否来自不同的 jar-s? FreeMarker 需要 class 作为第一个参数的原因是它将使用 class 的定义 ClassLoader
来加载模板。在某些设置中(特别是在 OSGi 下),您必须小心选择来自包含模板的同一个 jar 的 class。如果它仍然不起作用,只是为了排除 FreeMarker 作为可能的原因,您可以尝试是否可以通过 Class.getResourceAsStream(...)
.
加载所需的模板
弃用:弃用不是错误。正如弃用消息所说:"Use Configuration(Version) instead." 这也是 FreeMarker 文档中的内容,应将其用作 FreeMarker 相关信息的主要来源。
我正在尝试从 2 个不同的地方加载 Freemarker 的模板。 ftl文件所在的文件夹是:
/docroot/WEB-INF/src/charts/base
/docroot/WEB-INF/src/charts/tmpl
我有以下 class 和 2 种方法:
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;
}
}
第一种方法正确加载模板。第二种方法 return 是一个错误 "Template not found for name "。两个文件夹都在同一级别,我检查了我要加载的文件是否存在。
什么可能导致 Freemarker 能够从一个文件夹加载模板而无法从另一个文件夹加载模板,因为它们处于同一级别(我尝试使用结尾“/”和没有它,但没有区别,行为是一样的)。
另外一个问题:
以下几行return错误:构造函数Configuration()已弃用
Configuration cfg = new Configuration();
我看到的所有文档和例子都是这样的。还有其他方法吗?
在此先感谢您的帮助。
这两个目录是否来自不同的 jar-s? FreeMarker 需要 class 作为第一个参数的原因是它将使用 class 的定义 ClassLoader
来加载模板。在某些设置中(特别是在 OSGi 下),您必须小心选择来自包含模板的同一个 jar 的 class。如果它仍然不起作用,只是为了排除 FreeMarker 作为可能的原因,您可以尝试是否可以通过 Class.getResourceAsStream(...)
.
弃用:弃用不是错误。正如弃用消息所说:"Use Configuration(Version) instead." 这也是 FreeMarker 文档中的内容,应将其用作 FreeMarker 相关信息的主要来源。