一.目的
- 父模板頁面定義好佈局,子模板可以重定義佈局中的部分內容
- 使模板可以實現類似"類"的繼承關係,並不限繼承層次
二.繼承概欖
父模板: base.ftl<head>
<@block name="head">base_head_content</@block>
</head>
<body>
<@block name="body">base_body_content</@block>
</body>
</html>
<div class='content'>
Powered By rapid-framework
</div>
</@override>
<@extends name="base.flt"/>
子模板child.ftl輸出
<head>
base_head_content
</head>
<body>
<div class='content'>
Powered By rapid-framework
</div>
</body>
</html>
三.指令介紹
- @block : 定義塊,可以被子模板用@override指令覆蓋顯示
- @override : 覆蓋@block指令顯示的內容
- @extends : 繼承其它模板,必須放在模板的最後面(注:該指令完全等價於#include指令,只是爲了提供統一的語義,即extends比include更好理解)
四.使用說明
要使用如上三個自定義指令,必須在freeemarker的Configuration中註冊。使用如下代碼:configuration.setSharedVariable("override", new OverrideDirective());
configuration.setSharedVariable("extends", new ExtendsDirective());
PS :項目中的配置,如:springmvc-servlet.xml
<!-- freemarker config for FreeMarkerViewResolver -->
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/freemarker/" />
<property name="defaultEncoding" value="GBK" />
<property name="freemarkerVariables">
<map>
<entry key="extends" value-ref="extendsDirective"></entry>
<entry key="override" value-ref="overrideDirective"></entry>
<entry key="block" value-ref="blockDirective"></entry>
<entry key="super" value-ref="superDirective"></entry>
</map>
</property>
</bean>