您的位置:首页 > 其它

【FreeMarker】【模板文件FTL】模板自定义指令 macro

2016-03-04 00:22 274 查看


自定义指令macro

自定义指令可以使用 macro 指令来定义,这是模板设计者所关心的内容。Java程序员若不想在模板中实现定义指令,而是在Java语言中实现指令的定义,这时可以使用freemarker.template.TemplateDirectiveModel类来扩展(后续章节)。

宏是有一个变量名的模板片段。你可以在模板中使用宏作为自定义指令,这样就能进行重复性的工作。

例如:

[html] view
plain copy

 





<#macro greet>  

<font size="+2">Hello Joe!</font>  

</#macro>  

macro指令自身不打印任何内容,它只是用来创建宏变量,所以就会有一个名为greet的变量。在<#macro greet>和</#macro>之间的内容(称为宏定义体)当使用它作为指令时将会被执行。你可以在FTL标记中通过@代替#来使用自定义指令。使用变量名作为指令名。而且,自定义指令的结束标记也是需要的。

[html] view
plain copy

 





<@greet></@greet>  

或者  

<@greet/>  

打印出:

[html] view
plain copy

 





<font size="+2">Hello Joe!</font>  


macro参数

在macro指令中,宏名称的后面位置是用来定义变量的。

例如:

[html] view
plain copy

 





<#macro greet person>  

<font size="+2">Hello ${person}!</font>  

</#macro>  

按如下使用这个宏:

[html] view
plain copy

 





<@greet person="Fred"/> and <@greet person="Batman"/>  

打印出:

[html] view
plain copy

 





<font size="+2">Hello Fred!</font>  

and <font size="+2">Hello Batman!</font>  

使用预定义指令时,参数的值(=号后边的值)可以是FTL表达式

自定义指令可以有多个参数

例如:

[html] view
plain copy

 





<#macro greet person color>  

<font size="+2" color="${color}">Hello ${person}!</font>  

</#macro>  

按如下使用:

[html] view
plain copy

 





<@greet person="Fred" color="black"/>  

或  

<@greet color="black" person="Fred"/>  

参数的顺序并不重要

可以指定参数的默认值

例如:

[html] view
plain copy

 





<#macro greet person color="black">  

<font size="+2" color="${color}">Hello ${person}!</font>  

</#macro>  


嵌套macro内容

自定义指令可以嵌套内容。

例如:

[html] view
plain copy

 





<#macro border>  

<table border=4 cellspacing=0 cellpadding=4><tr><td>  

<#nested>  

</td></tr></table>  

</#macro>  

按如下使用:

[html] view
plain copy

 





<@border>The bordered text</@border>  

输出:

[html] view
plain copy

 





<table border=4 cellspacing=0 cellpadding=4><tr><td>  

The bordered text  

</td></tr></table>  

nested指令可以多次被调用

例如:

[html] view
plain copy

 





<#macro do_thrice>  

<#nested>  

<#nested>  

<#nested>  

</#macro>  

<@do_thrice>  

Anything.  

</@do_thrice>  

输出:

[html] view
plain copy

 





Anything.  

Anything.  

Anything.  


macro和循环变量


使用命名空间组织macro

参见命名空间一节。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: