Freemarker #include ignore-missing ....我想我想念一些东西

时间:2015-05-05 16:37:53

标签: java servlets freemarker template-engine

我是一个带有freemarker的完整新手,所以我确信我会错过一些东西!!

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

template1.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>

如果我使用数据模型处理template1(如代码

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

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

任何想法?

实际上我已经找到了在标签上使用的选项&lt; #include&gt;如在代码中

<#include dynamicOptionaContent ignore-missing=true>

但它仍然失败并引发异常

请帮助!!!!!!!

1 个答案:

答案 0 :(得分:0)

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

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

ignore_missing的{​​{1}}选项是另一个选择。它处理缺少模板(文件)的情况。