Freemarker:子变量的动态插值

时间:2012-09-12 16:43:01

标签: freemarker

我正在尝试创建一个FreeMarker宏,它可以返回字符串和输入变量串联的插值:

<#macro findValue var>
   <#if (.vars["foo." + var]) ??> 
     .vars["foo." + var]
   <#else>
     ${.vars["bar." + var]}
   </#if>
</#macro>

不幸的是它不起作用。首先,${.vars["bar." + var]}会出现undefined错误。其次,if条件总是返回false,即使我可以看到子变量确实存在。似乎.vars变量只能查找根变量,而不能查找像foo.test这样的子变量。

1 个答案:

答案 0 :(得分:1)

在FreeMarker中,foo.barfoo["bar"]相同,但在[]内,您可以拥有评估到字符串的任意表达式。所以你要找的表达式只是foo[var]

顺便说一下,你的宏尝试做的只是${foo[var]!bar[var]}