Freemarker模版实现接口和继承(上)已经实现了模版的接口(或叫接口模版),下面自定义一个指令<@extends>扩充<#include>,利用宏指令的特性,实现模版的继承(或叫继承模版)。这是我尝试过的最好方法,充分利用macro和include指令,最小的改动实现继承。
用法: <@extends path=""/>
可选参数: encoding,parse,用法参考include指令
注册:configuration.setSharedVariable(ExtendsDirective.DIRECTIVE_NAME, new ExtendsDirective());
使用:
<@extends path=" implement.ftl "/>
< #macro mid>
继承
< /#macro>
结果:
start
继承
end
原理:
修改<#include>特性,如果模版已经存在同名的宏指令定义,优先使用。否则使用<#include>模版里面的宏指令。
宏macro还有很多特性,如局部变量等等,请参考freemarker文档。充分利用接口模版,继承模版,使得开发freemarker模版变得更面向对象。
如果对你现在的开发有帮助,不胜荣幸。