我想从2个不同的地方加载Freemarker的模板。其中FTL文件所在的文件夹是:Freemarker:从不同位置加载模板
/docroot/WEB-INF/src/charts/base
/docroot/WEB-INF/src/charts/tmpl
我有下面的类有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;
}
}
第一种方法正确加载模板。第二种方法返回一个错误,指出“找不到名称的模板”。两个文件夹都处于同一级别,并且检查了我尝试加载的文件是否存在。
什么可能会导致Freemarker能够从一个文件夹中加载模板,并为另一个文件夹失败,因为它们处于同一级别(我尝试了结尾“/”,没有它,它没有区别,行为是一样的)。
一个额外的问题:
以下行返回错误:构造配置()已过时
Configuration cfg = new Configuration();
所有的文档和例子我见过有像这样。有没有其他的方式来做到这一点?
在此先感谢您的帮助。
感谢您的帮助。我只是想知道这里发生了什么。我正在使用Liferay portlet。项目中添加了“基础”中的模板。 “tmpl”文件夹是空的,并且在那里的ftl文件是在运行时创建的。会发生什么情况是,调试器正在查找源代码文件夹(Eclipse Workspace)中的文件,其中“tmpl”文件夹为空;我在运行时创建的文件正在部署文件夹(Liferay的Apache webapps文件夹)中创建。总之,调试器正在错误的位置查找ftl文件。 – jgrodrigueza