我正在使用freemarker模板。 我有一个波纹问题:
我在路径"home/freemarker/test.ftl"
Bellow是我用来阅读模板的代码
Code :
public Template read_template()
{
String template="home/freemarker/test.ftl";//local path
Configuration cfg = new Configuration();
cfg.setIncompatibleImprovements(new Version(2, 3, 20));
cfg.setDefaultEncoding("UTF-8");
cfg.setLocale(Locale.US);
Template template = cfg.getTemplate(template);
return template;
}
当我从void main()
调用它时,这个工作非常完美现在的问题是我在运行服务器时读取它。
Template template = cfg.getTemplate(template); 此行抛出文件未找到异常。
注意:
String folder_path = RuntimeProperties.get("freemarker.TemplateDirectory");//for server
其中
我测试了使用相同路径读取相同文件test.ftl
只是来自服务器的普通文本文件阅读器函数
这是achivable,所以我确认没有路径问题。 该文件可以在相应的路径中使用。
错误Filenot found Exception
cfg.getTemplate(folder_path +" test.ftl"); //仅限于此
答案 0 :(得分:1)
您尚未在TemplateLoader
中设置Configuration
。当您使用低incompatibleImprovements
时,您的配置将使用脆弱且危险的旧版默认TemplateLoader
,它使用当前目录作为模板根目录。
我不知道你是如何“测试读取同一个文件”的,但是如果你在那里使用RuntimeProperties.get("freemarker.TemplateDirectory")
作为基本目录,那么问题就来自于此。 FreeMarker不会使用这样的东西。 (我甚至不知道API RuntimeProperties
是什么。)当然你应该有这样的东西:
cfg.setTemplateLoader(
new FileTemplateLoader(
RuntimeProperties.get("freemarker.TemplateDirectory")));
此外,升级该项目中的FreeMarker。有一段时间,错误消息告诉您(a)您使用的是不推荐的默认值,应设置templateLoader
设置,(b)尝试从中加载模板的物理位置。
(另外,我假设真实代码的结构不同,但为了以防万一,请注意Configuration
应该是一个单独的,不应该为每个getTemplate
调用重新创建。)< / p>