我是一个带有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>
但它仍然失败并引发异常
请帮助!!!!!!!
答案 0 :(得分:0)
#include
的使用与此无关。 FreeMarker不允许您在任何地方引用缺失值,除非您为其提供默认值(myOptionalVar!'my default'
),或者除非您想测试它是否存在(myOptionalVar??
)。因此,如果您不想在缺少变量的情况下进行包含,那么:
<#if dynamicOptionalContent??><#include dynamicOptionalContent></#if>
ignore_missing
的{{1}}选项是另一个选择。它处理缺少模板(文件)的情况。