我正在尝试创建一个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
这样的子变量。
答案 0 :(得分:1)
在FreeMarker中,foo.bar
与foo["bar"]
相同,但在[]
内,您可以拥有评估到字符串的任意表达式。所以你要找的表达式只是foo[var]
。
顺便说一下,你的宏尝试做的只是${foo[var]!bar[var]}