擴展freemarker,實現模板的繼承
現擴展freemarker,新增加三個指令: @extends,@block,@override
<html>
<head>
<@block name="head">base_head_content</@block>
</head>
<body>
<@block name="body">base_body_content</@block>
</body>
</html>
子模板child.ftl
<@override name="body">
<div class='content'>
Powered By rapid-framework
</div>
</@override>
<@extends name="base.flt"/>
子模板child.ftl輸出
<html>
<head>
base_head_content
</head>
<body>
<div class='content'>
Powered By rapid-framework
</div>
</body>
</html>
可以看到,body部分被重定義了,而head部分則還是顯示父模板的內容。
configuration.setSharedVariable("block", new BlockDirective());
configuration.setSharedVariable("override", new OverrideDirective());
configuration.setSharedVariable("extends", new ExtendsDirective());
以上三個指令屬于rapid-framework的擴展,后續新版本發布將包含該項擴展,敬請關注。具體指令源碼請查看:
http://rapid-framework.googlecode.com/svn/trunk/rapid-framework/src/rapid_framework_common/cn/org/rapid_framework/freemarker/directive/
一.目的
- 父模板頁面定義好布局,子模板可以重定義布局中的部分內容
- 使模板可以實現類似"類"的繼承關系,并不限繼承層次
二.繼承概欖
父模板: base.ftl













子模板child.ftl輸出










三.指令介紹
- @block : 定義塊,可以被子模板用@override指令覆蓋顯示
- @override : 覆蓋@block指令顯示的內容
- @extends : 繼承其它模板,必須放在模板的最后面(注:該指令完全等價于#include指令,只是為了提供統一的語義,即extends比include更好理解)
四.使用說明
要使用如上三個自定義指令,必須在freeemarker的Configuration中注冊。使用如下代碼:


以上三個指令屬于rapid-framework的擴展,后續新版本發布將包含該項擴展,敬請關注。具體指令源碼請查看:
http://rapid-framework.googlecode.com/svn/trunk/rapid-framework/src/rapid_framework_common/cn/org/rapid_framework/freemarker/directive/