当前位置: 首页 > 知识库问答 >
问题:

Freemarker模板,用于从路径WEB-INF\ftl访问Freemarker文件\

戚飞
2023-03-14

使用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。但是我没有看到任何方法来接受文件作为输入流或文件。

ServletActionContext.getServletContext().getResourceAsStream("WEB-INF/ftl/helloworld.ftl");

你能让我知道如何解决这个问题吗?

共有1个答案

姜旭
2023-03-14

我可以自己解决这个问题。

配置中提供了一种方法,您可以在其中设置模板位置和ServletContext。

cfg.setServletContextForTemplateLoading(context, "WEB-INF/ftl");

您只需要将servletContext对象传递给具有FTL位置的上述方法。当您使用下面的代码处理模板时,它只会拾取文件并进行处理。

Template template = cfg.getTemplate("helloworld.ftl");
 类似资料:
  • 是否可以访问模板中的设置变量? 设置: 如何使用,而不在模板中重用,以避免重复的代码,尤其是在其层次结构较深的情况下?

  • 当我点击登录按钮并通过数据库成功登录后,它被重定向到hello.ftl页面。但是ftl页面显示此错误 FreeMarker模板错误(调试模式;在生产中使用RETHROW!):以下内容的计算结果为null或missing:==>var[在模板“hello.ftl”第8行,第32列]----提示:如果已知失败的表达式在法律上引用了有时为null或missing的内容,可以指定默认值,如myoption

  • 在我的应用程序中,所有freemarker模板都位于/templates/ftl/中,因此在应用程序部署期间,我加载了一个类,我调用了一个扩展FreemarkerManager并具有方法的类 这样,当我需要加载模板文件时,我可以这样做: 仅在一种特定情况下,我需要获得一个来自完全不同路径的模板(而不是/templates/ftl/)。 如何在这个特定的时刻声明模板加载的第二个目录,而不破坏所有调用

  • 我正在使用Smoks库进行XML到XML的转换。下面是Smoks配置。在freemarker模板中,我希望访问jdk库类以及我在项目中创建的类。请让我知道我如何实现这一点。

  • 我正在尝试使用从多个位置加载模板。这个项目是使用开发的。 我有两个maven项目: > 我的网站:maven的主要项目,包含自定义模板,例如WEB-INF/ftl/landing/login。ftl 通用模板:包含位于WEB-INF/ftl的通用freemarker模板,例如WEB-INF/ftl/landing/login。ftl 例如,Freemarker的想法是在“我的网站”中搜索登陆/登录

  • 我在Dropwizard应用程序中设置视图时遇到了Freemarker的一个奇怪问题。 按照这里的文档,我建立了一个非常简单的示例,如下所示 使用 呈现时的预期输出是显示的HTML文档。 实际发生的情况是Freemarker抛出一个异常,抱怨——特别是——未定义。 这似乎是因为是一个公共字段,没有getter。当我添加一个公共字符串getBar(){返回栏;}getter到时,它就工作了。 我有点