1、<#assign mouse = "Jerry"> ?// 声明变量 ?mouse ="Jerry"
?
2、<#if mouse??> ? ?// 判断mouse 是否存在
? ? ? ? ? Mouse found
? ? ?<#else>
? ? ? ? ? No mouse found
? ? ?</#if>
?
3、${"green " + "mouse"?upper_case} ? ---> ? ?<#-- green MOUSE -->
? ? ?${("green " + "mouse")?upper_case} ? ---> ?<#-- GREEN MOUSE -->
?
4、创建一个宏变量 来打印大号的”Hello Joe!”
? ? ?<#macro greet>
? ? ? ? ? ? <font size="+2">Hello Joe!</font>
? ? ?</#macro>
? ? ?macro指令自身不打印任何内容,它只是用来创建宏变量,所以就会有一个名为greet的变量。在<#macro greet>和</#macro>之间的内容(称为宏定义体)当使用它作为指令时将会被执行。你可以在FTL标记中通过@代替#来使用自定义指令。使用变量名作为指令名。而且,自定义指令的结束标记也是需要的。那么,就可以这样来使用greet了:
?
?无参数:<@greet></@greet> ----->打印 <font size="+2">Hello Joe!</font>;
?
? ?
?有参数:<#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>
?
自定义指令可以有多个参数。
? ? ? ? <#macro greet person color>
? ? ? ? ? ? ? ? ? <font size="+2" color="${color}">Hello ${person}!</font>
? ? ? ? </#macro>
那么就这样来使用:<@greet person="Fred" color="black"/> 或者<@greet color="black" person="Fred"/>
参数的顺序不重要 。 宏参数的另外一个重要的方面是它们是 局部变量
?
5、很多情况下需要给一个参数指定一个相同的值,所以我们仅仅想在这个值发生变化后重新赋给变量。那么要达到这个目的,在macro指令中必须这么来指定变量:param_name=usual_value。例如,当没有特定值的时候,我们想要给color赋值为"black",那么greet指令就要这么来写:
? ?<#macro greet person color="black">
? ? ? ? <font size="+2" color="${color}">Hello ${person}!</font>
? ?</#macro>
?现在,我们这么使用宏就可以了:<@greet person="Fred"/>,因为它和<@greet person="Fred" color="black"/>是相同的,这样参数color的值就是已知的了。如果想给color设置为”red”,那么就写成:
<@greet person="Fred" color="red"/>,这时macro指令就会使用这个值来覆盖之前设置的通用值,参数color的值就会是”red”了。
6、 根据FTL表达式规则,明白这一点是至关重要的,someParam=foo和someParam="${foo}"是不同的。第一种情况,是把变量foo的值作为参数的值来使用。第二种情况则是使用插值形式的字符串,那么参数值就是字符串了,这个时候,foo的值呈现为文本,而不管foo是什么类型(数字,日期等)的。看这个例子:someParam=3/4和someParam="${3/4}"是不同的,如果指令需要someParam是一个数字值,那么就不要用第二种方式。切记不要改变这些。
?
?
7、嵌套内容
? ?<#macro do_thrice>
? ? ? ? ? ? <#nested>
? ? ? ? ? ? <#nested>
? ? ? ? ? ? <#nested>
? </#macro>
? <@do_thrice>
? ? ? ? ? ? Anything.
? </@do_thrice>
?
? 打印结果:
? ? ? ? ? ? ?Anything.
? ? ? ? ? ? ?Anything.
? ? ? ? ? ? ?Anything.
?
在嵌套内容中,宏的局部变量是不可见的 。
?
?
?
?
?
?
?
?
?
?
?