分享
 
 
 

FreeMarker设计指南(4) (完)

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

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>

输出结果:

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

<ul>

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

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

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

</ul>

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

Ø 宏定义中的局部变量对嵌套内容是不可见的,例如:

<#macro repeat count>

<#local y = "test">

<#list 1..count as x>

${y} ${count}/${x}: <#nested>

</#list>

</#macro>

<@repeat count=3>${y?default("?")} ${x?default("?")} ${count?default("?")}</@repeat>

输出结果:

test 3/1: ? ? ?

test 3/2: ? ? ?

test 3/3: ? ? ?

Ø

l 在宏定义中使用循环变量

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有