【问题标题】:include not parsing template file包括不解析模板文件
【发布时间】:2018-02-08 09:27:27
【问题描述】:

我有三个非常简单的文件:

ma​​in.ftl

<#include "header.ftl">

<h1>Test</h1>

<#include "footer.ftl">

header.ftl

<h1>Header</h1>

footer.ftl

<h1>Footer</h1>

从技术上讲,它应该输出三个h1,但我的实际输出是:

  1. 我了解到,根据配置,ftl 的括号可能会从&lt;&gt; 更改为[],我尝试更改但仍然没有。
  2. 我使用了* 通配符来检查父目录和当前目录,但仍然没有运气。
  3. Freemarker 文档指出,默认情况下 include 指令将内容解析为.ftl 文件,所以我应该没有 问题:

parse:如果为真,则包含的文件将被解析为 FTL,否则整个文件将被视为简单文本(即,不会在其中搜索任何 FreeMarker 构造)。如果省略此选项,则默认为 true。

那么为什么我的模板没有被解析?

【问题讨论】:

    标签: java freemarker ofbiz


    【解决方案1】:

    为了未来的读者...... #include 指令永远不会像 &lt;#include ...&gt; 那样输出自己(所以你现在知道,它是 main.ftl 没有传递给 FreeMarker)。其parse 参数适用于包含ed 文件。此外,如果没有找到模板,它会抛出异常,而不是像打印&lt;#include ...&gt; 这样任意操作。

    【讨论】:

      【解决方案2】:

      来自here

      <#include "/common/copyright.ftl">
      

      所以我假设页脚和页眉与您的主文件位于同一文件夹中。因此,您必须执行以下操作:

      <#include "*/header.ftl">
      <#include "*/footer.ftl">
      

      【讨论】:

      • 是的,它没有解析。
      • 哦,我刚刚又检查了一遍,你应该使用 * 而不是 .我将编辑我的答案,请重试。
      • 您是否尝试过添加 parse=true。像这样
      • 注意,如果没有找到模板,那么模板处理会抛出异常。所以问题不能与没有找到包含的模板有关。
      【解决方案3】:

      原来 Freemarker 没有将 .ftl 文件作为实际的 .ftl 文件处理,因为服务器正在将内容呈现为 .jsp 文件,为了修复我已更改:

      <view-map name="frs" page="">
      

      到,

      <view-map name="frs" type="screen" page="component://ecommerce/widget/CommonScreens.xml#your-identifier"/>
      

      修复了渲染。默认情况下,如果未定义 type 属性,则它会自动呈现为 JSP 文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-16
        • 2011-01-20
        • 2016-01-18
        • 1970-01-01
        • 2017-02-01
        相关资源
        最近更新 更多