根据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.ftl
,contactUs.ftl
等)创建单独的模板,然后告诉FreeMarkers哪些FTL文件&#34;使用&#34;布局。这样我就不必在每个模板文件中继续指定页眉/页脚包含。
FreeMarker是否支持这种概念?
答案 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);