Uploaded image for project: 'Apache Freemarker'
  1. Apache Freemarker
  2. FREEMARKER-170

Configuration.getTemplate方法太局限,应该提供按模板文件流生成Template对象的重载方法

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Not A Problem
    • 2.3.30
    • None
    • engine
    • java version "1.8.0_171"
      IDEA
      windows 10
    • Patch

    Description

      在springboot中,我将模板文件test.ftl放在src/main/resources/templates/ 

      调用Freemarker API操作模板,主要步骤如下:

      Configuration cfg = new Configuration(Configuration.VERSION_2_3_22);

      File templateConfigDir = new File(this.getClass().getResource("/templates").getFile());

      cfg.setDirectoryForTemplateLoading(templateConfigDir);

      Template temp = cfg.getTemplate("test.ftl");

      此时模板文件的路径是src/main/resources/templates/ ,在IDEA中测试没有问题。

      但是当我把springboot工程打成jar包测试时,会得到一个异常:java.io.FileNotFoundException: file:\C:\Users\Administrator\Desktop\ts\app-1.0.0-SNAPSHOT.jar!\BOOT-INF\classes!\templates does not exist.

       

      查看原因,这个目录是jar包中的一个目录,此时无法访问到这个目录。

      我的处理方式是:运行代码时,要将模板文件通过流的方式拷贝到工程外的一个目录,然后设置Freemarker:

      cfg.setDirectoryForTemplateLoading("工程外的配置目录");

       

      希望Freemarker可以提供一个重载API,不需要设置setDirectoryForTemplateLoading,生成Template对象时直接传入模板流(InputStream)。

      Attachments

        Activity

          People

            Unassigned Unassigned
            lhf 刘宏飞
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: