FreeMarker宏macro的使用

1.1定义自己的指令

1.1.1基础知识

         宏是一个模板片段与变量相关联。你可以使用定义的指令,可以帮助你多次使用

                   <#macro greet>

                            <font size=’+2’>HelloW Joe!</font>

                   </#macro>

         上面这个macro不会打印任何东西,它只是创建一个宏变量。这里有个变量叫greet,在<#macro greet></#macro>之间叫宏定义体.,里面将仅当你使用的参数。如果你要使用这样一个macro,可以这样

                   <@greet></@greet>

         这个时候才真正使用这个macro,将会打印一句话

         macro可以执行很多东西,你可以在它里面使用插值和FTL tags

        

1.1.2参数

         macro中定义参数要放在macro变量后面,如:

                  <#macro greet person>

                            <font  size=’+2’>Hello ${person}</font>

                  </#macro>

         在使用的时候:

                   <@greet person=’Fred’/> and <@greet person=’Batman’/>

         就会打印两条数据分别为 Hello Fred! Hello Batman,参数person众所我们所传进去的.

         在使用参数的时候要注意下面两点:

1、  使用的参数一定要事先定义;

2、  定义的参数在使用的时候一定要进行赋值,除非在创建macro的时候给参数默认值;

3、  参数所能赋予的值不一定是字符串,也可以是其他类型,还可以是一个预运算表达式

4、  在使用的时候,对参数赋值顺序不确定,可随意

5、  参数是局部变量,只能在宏定义中有效

         如果不满足上面任何一个,程序就会出错。

1.1.3嵌套内容

         macro定义题中您可以嵌套内容,如:

                   <#macro border>

                            <table border=4>

                                     <tr><td><#nested></td></tr>

                            </table>

                   </#macro>

         在使用的时候可以在开始标记和结束标记中填充内容:

                   <@border>Hellow World</@border>

         这样就会输出以及Hellow World,使用<#nested>可以嵌套指令可以在宏定义体中多次调用。

         如果你使用了一个定义体中没有<#nested>嵌套指令的宏,而开始标记和结束标记中嵌套的又有内容,FreeMarker不会出现任何错误,但内容不会输出.

 

         宏的局部变量并不满足可见嵌套:

         <#macro repeat count>

                   <#local y = ‘test’>

                   <#list 1.. count as x>

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

                   </#list>

         </#macro>

         <@repeat count=3>${y!’?’}   ${x!’?’}     ${count!’?’}</@repeat>

         上面将输出:

        test 3/1: ? ? ?

       test 3/2: ? ? ?

       test 3/3: ? ? ?

         可以看到yxcount都是局部变量,不能宏的嵌套内容中调用,只能作用域单一一个宏,这样可以避免混乱.

 

1.1.4(macro)与循环变量

<#macro repeat count>

         <#list 1..count as x>

                   <#nested x, x/2, x == count>

         </#list>

</#macro>

<@repeat count=4 ;c , halfc ,last>

         ${c}. ${halfc}<#if last>Last!</#if>

</@repeat>

循环变量:

循环变量是由像list这样的指令自己创建,它的作用范围只是他们的开始标记和结束标记之间。如果在一宏中,存在一个循环变量,并且循环变量的名字和宏的某参数相同,待循环结束之后并不会影响该宏参数的值。

<#assign x =”plain”>

${x}

<@test/>

<#list [“loop” as x]>

         <#assign x = “plain2”>

</#list>

${x}

<#macro test>

         ${x}

         <#local x=”local”>

         <#lsit [”loop”] as x>

                   ${x}

         </#list>

         ${x}

</#macro>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值