freemarker中关于当前宏上下文CurrentMacroContext的指向

来源:互联网 发布:php addslashes缺点 编辑:程序博客网 时间:2024/06/02 05:51

关于调用上下文的相关说明:
 <#macro A  name=["1","2"]>
 <@CC />
 <#nested>
 ${name?size}
</#macro>
 
<@A><@B name="t" value=["3","4"] action="addAll"/></@>

上面是一段关于macro定义与调用的典型用法,在运行A指令与B指令时它们的上下文 并不在宏体之中也就是说getCurrentMacroContext是为null的;而CC指令执行时它存在于A宏体的上下文之中,即在A指令的后台方法运行时getCurrentMacroContext的值是有值的;这里有一个很容易让人误解的地方就是B指令在在运行的时候当前上下文crrrentMacroContext是宏体A,其实不然,只是这两个宏体在调用栈的关系确实有这种关系,这并不代表B指令在执行过程中它的宏体上下文就是宏体A,实际A的CurrentMacroContext与B的CurrentMacroContext是同一个因为它们处于同一宏体中或同一空间中.
这里最重要的就是不要把宏体的调用关系与CurrentMacroContext进行理所当然的关联:即如果宏A调用宏B则B的CurrentMacroContext就是A那是绝对错误的只有当在宏A的定义调用了宏B则B在运行时的CurrentMacroContext才会是A.

原创粉丝点击