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、创建一个宏变量 
     <#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.

 

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