FreeMarker marco指令(3.4)

marco, nested, return 指令

语法:

<#marco name param1 param2 ... paramN>

...

<#nested loopvar1,loopvar2,...,loopvarN>

...

<#return>

...

</#marco>

说明:

  1. name: 宏变量的名称,它不是表达式。
  2. param1,param2等:局部变量的名称,存储参数的值(不是表达式)
  3. loopvar1,loopvar2等:可选的循环变量的值,是nested指令想为嵌套内容创建的。这些都是表达式。
  4. return 和 nested指令时可选的。 而且可以在<#marco></#marco>之间被用在任意位置和任意次数。
  5. 没有默认值的参数必须在有默认值参数(paramName=defaultValue)之前。

      marco 宏变量存储模板片段(宏定义体),可以被用作自定义指令。这个变量也存储自定义指令的被允许的参数名。当将这个变量作为指令时,必须给所有参数赋值,除了有默认值的参数。默认值当且仅当你调用宏而不给参数赋值时起作用。

变量会在模板开始时被创建,而不管 marco指令放置在模板的什么位置。

示例1:有参数的、且有默认值参数

<#macro test foo bar="Bar" baaz=-1>
Test text, and the params: ${foo}, ${bar}, ${baaz}
</#macro>

<@test foo="a" bar="b" baaz=5*5-2/>
<@test foo="a" bar="b"/>
<@test foo="a" baaz=5*5-2/>
<@test foo="a"/>

输出结果:

Test text, and the params: a, b, 23
Test text, and the params: a, b, -1
Test text, and the params: a, Bar, 23
Test text, and the params: a, Bar, -1

示例2:

<#macro list title items>
<p>${title?cap_first}:
<ul>
<#list items as x>
<li>${x?cap_first}
</#list>
</ul>
</#macro>
<@list items=["mouse", "elephant", "python"] title="Animals"/>

     nested 指令执行自定义指令开始和结束标签中间的模板片段。嵌套的片段可以包含模板中合法的任意内容:插值,指令…等。它在上下文环境中被执行,也就是宏被调用的地方,而不是宏定义体的上下文中。因此,比如,你不能看到嵌套部分的宏的局部变量。

示例3:

<#macro do_twice>
1. <#nested>
2. <#nested>
</#macro>

<@do_twice>something</@do_twice>

输出: 

1. something
2. something

示例4:(嵌套指令可以对嵌套内容创建循环变量)

<#macro do_thrice>
<#nested 1>
<#nested 2>
<#nested 30>
</#macro>

<#-- 在自定义指令的情形下,语法是循环变量的名称在分号之后给定-->
<@do_thrice ; x> 
${x} Anything.
</@do_thrice>

输出:
1Anything.
2 Anything.
30 Anything.
原文地址:https://www.cnblogs.com/kjitboy/p/5094274.html