« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
| 公告 |
本博客在此声明所有文章均为转摘,只做资料收集使用。并无其他商业用途。 |
Blog信息 |
blog名称: 日志总数:210 评论数量:205 留言数量:-19 访问次数:918931 建立时间:2007年5月10日 |

| |
[界面和模板语言]FreeMarker设计指南(4) 文章收藏, 网上资源, 软件技术, 电脑与网络
李小白 发表于 2007/10/31 19:35:04 |
4、杂项
(1)用户定义指令
l 宏和变换器变量是两种不同类型的用户定义指令,它们之间的区别是宏是在模板中使用macro指令定义,而变换器是在模板外由程序定义,这里只介绍宏
l 基本用法
Ø 宏是和某个变量关联的模板片断,以便在模板中通过用户定义指令使用该变量,下面是一个例子:
<#macro greet> <font size="+2">Hello Joe!</font></#macro>
Ø 作为用户定义指令使用宏变量时,使用@替代FTL标记中的#
<@greet></@greet>
Ø 如果没有体内容,也可以使用:
<@greet/>
l 参数
Ø 在macro指令中可以在宏变量之后定义参数,如:
<#macro greet person> <font size="+2">Hello ${person}!</font></#macro>
Ø 可以这样使用这个宏变量:
<@greet person="Fred"/> and <@greet person="Batman"/>
输出结果是:
<font size="+2">Hello Fred!</font> and <font size="+2">Hello Batman!</font>
Ø 宏的参数是FTL表达式,所以下面的代码具有不同的意思:
<@greet person=Fred/>
Ø 这意味着将Fred变量的值传给person参数,该值不仅是字符串,还可以是其它类型,甚至是复杂的表达式
Ø 宏可以有多参数,下面是一个例子:
<#macro greet person color> <font size="+2" color="${color}">Hello ${person}!</font></#macro>
Ø 可以这样使用该宏变量:
<@greet person="Fred" color="black"/>
Ø 其中参数的次序是无关的,因此下面是等价的:
<@greet color="black" person="Fred"/>
Ø 只能使用在macro指令中定义的参数,并且对所有参数赋值,所以下面的代码是错误的:
<@greet person="Fred" color="black" background="green"/><@greet person="Fred"/>
Ø 可以在定义参数时指定缺省值,如:
<#macro greet person color="black"> <font size="+2" color="${color}">Hello ${person}!</font></#macro>
Ø 这样<@greet person="Fred"/>就正确了
Ø 宏的参数是局部变量,只能在宏定义中有效
l 嵌套内容
Ø 用户定义指令可以有嵌套内容,使用<#nested>指令执行指令开始和结束标记之间的模板片断
Ø 例子:
<#macro border> <table border=4 cellspacing=0 cellpadding=4><tr><td> <#nested> </tr></td></table></#macro>
这样使用该宏变量:
<@border>The bordered text</@border>
输出结果:
<table border=4 cellspacing=0 cellpadding=4><tr><td> The bordered text </tr></td></table>
Ø <#nested>指令可以被多次调用,例如:
<#macro do_thrice> <#nested> <#nested> <#nested></#macro><@do_thrice> Anything.</@do_thrice>
输出结果:
Anything. Anything. Anything.
Ø 嵌套内容可以是有效的FTL,下面是一个有些复杂的例子:
<@border> <ul> <@do_thrice> <li><@greet person="Joe"/> </@do_thrice> </ul></@border>
输出结果: |
|
|