Freemarker 模板从路径 WEB-INF\ftl\ 访问 Freemarker 文件
Posted
技术标签:
【中文标题】Freemarker 模板从路径 WEB-INF\\ftl\\ 访问 Freemarker 文件【英文标题】:Freemarker Template to access Freemarker files from the path WEB-INF\ftl\Freemarker 模板从路径 WEB-INF\ftl\ 访问 Freemarker 文件 【发布时间】:2015-09-11 11:58:42 【问题描述】:我对使用 Freemarker 模板有两个不同的要求。一种是打印网页的某些部分,另一种是生成自定义的 html 文件。我已将所有 FTL 文件放在路径 WEB-INF/ftl/ 下。Web 应用程序从上述位置提取正确的 FTL 文件并打印网页。当我不得不生成 HTML 文件时,Freemarker 无法找到相应的 FTL 文件。
我试图将那个特定的 FTL 文件保存在 resources/ftl/ 下,但它仍然无法获取该文件。我在 src 下创建了一个包并放置了 FTL。 Maven 不采用该包,因为它没有 java 文件。
Configuration cfg = new Configuration();
cfg.setClassForTemplateLoading(this.getClass(), "");
Template template = cfg.getTemplate("helloworld.ftl");
我可以考虑用两种不同的方式解决这个问题。一种方法是将文件保存在项目中或类路径中,以便被 Freemarker 拾取。另一种方法是将其作为 InputStream 获取并将其传递给 Freemarker。但我没有看到任何方法可以将文件作为 InputStream 或 File 接受。
ServletActionContext.getServletContext().getResourceAsStream("WEB-INF/ftl/helloworld.ftl");
您能告诉我如何解决这个问题吗?
【问题讨论】:
【参考方案1】:我可以自己解决这个问题。
配置中有一个方法可以设置模板位置和ServletContext。
cfg.setServletContextForTemplateLoading(context, "WEB-INF/ftl");
您只需要将 servletContext 对象与 FTL 位置一起传递给上述方法。当您通过以下代码处理模板时,它只会拾取文件并处理它。
Template template = cfg.getTemplate("helloworld.ftl");
【讨论】:
以上是关于Freemarker 模板从路径 WEB-INF\ftl\ 访问 Freemarker 文件的主要内容,如果未能解决你的问题,请参考以下文章