FreeMarkermacro宏的使用Word下载.docx
《FreeMarkermacro宏的使用Word下载.docx》由会员分享,可在线阅读,更多相关《FreeMarkermacro宏的使用Word下载.docx(8页珍藏版)》请在冰豆网上搜索。
${title}<
/title>
如果不在freemarker.properties里定义,可以在每个文件里包含这个ftl:
#import"
/WEB-INF/template/common/common.ftl"
asc>
不同的场合有不同的运用。
使用得好的话,将会大大节省你的开发时间。
macro,nested,return
语法
#macronameparam1param2...paramN>
...
#nestedloopvar1,loopvar2,...,loopvarN>
#return>
/#macro>
用例
#macrotestfoobar="
Bar"
baaz=-1>
Testtext,andtheparams:
${foo},${bar},${baaz}
@testfoo="
a"
bar="
b"
baaz=5*5-2/>
/>
输出
a,b,23
a,b,-1
a,Bar,23
a,Bar,-1
定义循环输出的宏
#macrolisttitleitems>
p>
${title?
cap_first}:
ul>
#listitemsasx>
li>
${x?
cap_first}
/#list>
/ul>
@listitems=["
mouse"
"
elephant"
python"
]title="
Animals"
输出结果
Animals:
Mouse
Elephant
Python
包含body的宏
#macrorepeatcount>
#list1..countasx>
#nestedx,x/2,x==count>
@repeatcount=4;
chalfclast>
${c}.${halfc}<
#iflast>
Last!
/#if>
/@repeat>
1.0.5
2.1
3.1.5
4.2Last!
--------------------------------------------------------------------------------
注意在使用的时候:
别忘了双引号。
/pagelibs/book.ftl"
asbook>
@workorder.pricevalue="
${book.price}"
宏Macro
宏是在模板中使用macro指令定义
l.1基本用法
宏是和某个变量关联的模板片断,以便在模板中通过用户定义指令使用该变量,下面是一个例子:
#macrogreet>
fontsize="
+2"
>
HelloJoe!
/font>
调用宏时,与使用FreeMarker的其他指令类似,只是使用@替代FTL标记中的#。
@greet>
/@greet>
#--<
@greet/>
-->
在macro指令中可以在宏变量之后定义参数,如:
#macrogreetperson>
Hello${person}!
可以这样使用这个宏变量:
@greetperson="
Fred"
但是下面的代码具有不同的意思:
@greetperson=Fred/>
这意味着将Fred变量的值传给person参数,该值不仅是字符串,还可以是其它类型,甚至是复杂的表达式。
宏可以有多参数,下面是一个例子:
#macrogreetpersoncolor>
color="
${color}"
可以这样使用该宏变量,其中参数的次序是无关的:
black"
可以在定义参数时指定缺省值,否则,在调用宏的时候,必须对所有参数赋值:
#macrogreetpersoncolor="
注意:
宏的参数是局部变量,只能在宏定义中有效。
嵌套内容
FreeMarker的宏可以有嵌套内容,<
#nested>
指令会执行宏调用指令开始和结束标记之间的模板片断,举一个简单的例子:
#macroborder>
tableborder=4cellspacing=0cellpadding=4>
tr>
td>
/tr>
/td>
/table>
执行宏调用:
@border>
Theborderedtext<
/@border>
输出结果:
Theborderedtext<
指令可以被多次调用,每次都会执行相同的内容。
#macrodo_thrice>
@do_thrice>
Anything.<
/@do_thrice>
FMPP输出结果:
Anything.Anything.Anything.
嵌套内容可以是有效的FTL,下面是一个有些复杂的例子,我们将上面三个宏组合起来:
Joe"
宏定义中的局部变量对嵌套内容是不可见的,例如:
#localy="
test"
${y}${count}/${x}:
@repeatcount=3>
${y?
default("
?
"
)}${x?
)}${count?
)}<
test3/1:
?
test3/2:
test3/3:
在宏定义中使用循环变量
nestted指令也可以有循环变量(循环变量的含义见下节),调用宏的时候在宏指令的参数后面依次列出循环变量的名字,格式如下:
@macro_nameparamterlist;
loopvariablelist[,]>
例如:
c,halfc,last>
${c}.${halfc}<
这里count是宏的参数,c,halfc,last则为循环变量,输出结果:
1.0.52.13.1.54.2Last!
循环变量和宏标记指定的不同不会有问题,如果调用时少指定了循环变量,那么多余的值不可见。
调用时多指定了循环变量,多余的循环变量不会被创建:
c,halfc>
@repeatcount=4>
Justrepeatit...<
在模板中定义变量
在模板中定义的变量有三种类型:
plain变量:
可以在模板的任何地方访问,包括使用include指令插入的模板,使用assign指令创建和替换。
局部变量:
在宏定义体中有效,使用local指令创建和替换。
循环变量:
只能存在于指令的嵌套内容,由指令(如list)自动创建;
宏的参数是局部变量,而不是循环变量
局部变量隐藏(而不是覆盖)同名的plain变量;
循环变量隐藏同名的局部变量和plain变量,下面是一个例子:
#assignx="
plain"
${x}<
#--weseetheplainvar.here-->
@test/>
6.${x}<
#--thevalueofplainvar.wasnotchanged-->
#list["
loop"
]asx>
7.${x}<
#--nowtheloopvar.hidestheplainvar.-->
plain2"
#--replacetheplainvar,hidingdoesnotmaterhere-->
8.${x}<
#--it