macro如何嵌套内容


java Freemarker中macro的宏可以有嵌套内容,<#nested>指令会执行宏调用指令开始和结束标记之间的模板片断。

macro嵌套内容例子
<#macro bodyheader>
<h1><#nested></h1>
</#macro>
//在开始标记和结束标记中填充嵌套内容
<@bodyheader>Hellow World</@bodyheader>

运行结果:

<h1><#nested></h1>

<#nested>指令可以被多次调用,每次都会执行相同的内容。

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

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

<#macro repeat count>
<#local y = ‘test’>
<#list 1.. count as x>
    ${y} ${count}/${x}:<#nested>
</#list>
</#macro>
<@repeat count=3>${y!’N’}   ${x!’N’}     ${count!’N’}</@repeat>

运行结果:

test 3/1: N N N
test 3/2: N N N
test 3/3: N N N

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