Freemarker 嵌套宏

Posted

技术标签:

【中文标题】Freemarker 嵌套宏【英文标题】:Freemarker nested macros 【发布时间】:2013-12-03 19:27:52 【问题描述】:

如何调用嵌套宏?

<@replaceA-sToB-s>
   <@replaceB-sToC-s Text/>
</@replaceA-sToB-s>

replaceB-sToC-s 简单地将任何“B”替换为“C” replaceA-sToB-s 简单地将任何“A”替换为“B”

【问题讨论】:

【参考方案1】:

如果你想将replaceB-sToC-s 宏的结果传递给replaceA-sToB-s,那么你必须使用这样的东西:

<#assign str><@replaceB-sToC-s "abc" /></#assign> 
<@replaceA-sToB-s str />

【讨论】:

您不必在每个@replaceBsToCs 呼叫周围进行捕捉。相反,您可以在 @replaceAsToBs 中执行此操作。但请看我的回答。【参考方案2】:

像这样:

<#macro replaceAsToBs>
  <#local captured><#nested></#local>
  $captured?replace('a', 'b')<#t>
</#macro>

<#macro replaceBsToCs text>
  $text?replace('b', 'c')<#t>
</#macro>

#t-s 仅用于删除 $... 部分周围的多余空格。)然后您将其称为:

<@replaceAsToBs>
   <@replaceBsToCs "abcd"/>
</@replaceAsToBs>

【讨论】:

以上是关于Freemarker 嵌套宏的主要内容,如果未能解决你的问题,请参考以下文章

转 freemarker macro(宏)的使用

是否可以通过编程方式创建 Freemarker 宏?

java freemarker list嵌套

在 Freemarker 宏中模拟空参数

freemarker宏定义引用路径解决方案

freemarker宏定义引用路径解决方案