FreeMarker布局可以减少模板冗余吗?

时间:2015-11-20 17:15:26

标签: layout freemarker templating

根据FreeMarker include statement docs,您可以像这样制作页眉和页脚感知模板:

<#include "/header.ftl">
<!-- Content of my this page -->
<#include "/footer.ftl">

但如果我的网络应用程序有数百个页面/视图,这就是很多冗余的复制意大利面。如果有一个&#34; 布局&#34;那就太好了。 FreeMarker中的概念,我可以说&#34; 嘿,这是一个布局:&#34;

<#include "/header.ftl">
<@import_FTL_Somehow>
<#include "/footer.ftl">

然后为每个视图/页面(index.ftlcontactUs.ftl等)创建单独的模板,然后告诉FreeMarkers哪些FTL文件&#34;使用&#34;布局。这样我就不必在每个模板文件中继续指定页眉/页脚包含。

FreeMarker是否支持这种概念?

1 个答案:

答案 0 :(得分:9)

它没有,但是如果你只需要一个页脚或标题,可以通过一些TemplateLoader hack解决(TemplateLoader插入页眉和页脚片段,就好像在那里模板文件)。但是FreeMarker中的常用解决方案是从每个模板中明确调用布局代码,但不能直接调用两个#include - s,但是像:

<@my.page>
  <!-- Content of my this page -->
</@my.page>

其中my是自动导入(请参阅Configuration.addAutoImport)。

更新:另一种方法是你有一个layout.ftl

Heading stuff here...
<#include bodyTemplate>
Footer stuff here...

然后从Java开始调用layout.ftl,同时使用bodyTemplate变量传递正文模板名称:

dataModel.put("bodyTemplate", "/foo.ftl");
cfg.getTemplate("layout.ftl").process(dataModel, out);