【问题标题】:Freemarker #include ignore-missing .... i think i miss somethingFreemarker #include ignore-missing .... 我想我错过了一些东西
【发布时间】:2015-07-15 12:28:39
【问题描述】:

我是 freemarker 的新手,所以我确定我错过了什么!!

我正在使用 tomcat 和 java servlet 构建一个网站,所以我需要 freemarker 来构建 html 代码。 我有时想在代码中包含一个模板到另一个模板中

模板1.ftl

<section>
    <header class='title'>Wrapper</header>
    <#include dynamicOptionalContent>
    <section>this is my static content</section>
</section>

template2.ftl

<section>
    <p>this section sometimes have to be shown sometimes not</p>
</section>

如果我使用代码中的数据模型处理模板1,一切正常

SimpleHash myData=new SimpleHash();
myData.put("dynamicOptionalContent","path/to/ftl/template2.ftl");

但是如果我不提供任何 dynamicOptionalContent 一切都会失败,因为 freemarker 想要一个有效的模板路径,更一般地说,它会寻找一个条目 dynamicOptionalContent .. .但有时我不想提供它!

有什么想法吗?

实际上我已经找到了一个选项可以在标签 上使用,就像代码中一样

<#include dynamicOptionaContent ignore-missing=true>

但它仍然失败并引发异常

请帮忙!!!!!!!

【问题讨论】:

  • 你可以试试&lt;#if dynamicOptionalContent?has_content&gt;&lt;#include .vars['dynamicOptionalContent']&gt;&lt;/#if&gt; 吗?
  • @sev 不需要.vars。毕竟,变量总是在运行时解析。

标签: java servlets freemarker template-engine


【解决方案1】:

#include 的用法在这里无关紧要。 FreeMarker 不允许您在任何地方引用缺失值,除非您为其提供默认值 (myOptionalVar!'my default'),或者除非您想测试它是否存在 (myOptionalVar??)。因此,如果您不想在变量丢失的情况下进行包含,那么:

<#if dynamicOptionalContent??><#include dynamicOptionalContent></#if>

#includeignore_missing 选项是另一回事。它处理引用的模板(文件)丢失的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 2010-09-06
    • 2010-10-17
    • 2021-07-10
    • 2019-09-18
    • 2019-01-13
    相关资源
    最近更新 更多