使用cfg.getTemplate读取Freemarker模板(路径)

时间:2017-09-22 06:54:34

标签: java freemarker

我正在使用freemarker模板。 我有一个波纹问题:

我在路径"home/freemarker/test.ftl"

中保留了一个文件[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"); //仅限于此

1 个答案:

答案 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>