当前位置: 代码迷 >> Web前端 >> freemarker 札记
  详细解决方案

freemarker 札记

热度:611   发布时间:2012-10-08 19:54:56.0
freemarker 笔记

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.

?

在嵌套内容中,宏的局部变量是不可见的

?

?

?

?

?

?

?

?

?

?

?