我在freemarker中有一个宏说
<#macro printHelloWorld var1 var2>
${var1}
${var2}
</#macro>
当我将此宏称为
时<@macro printHelloWorld var1="hello" var2="world" />
以预期的方式打印它 你好 世界。
但是,我的问题是我想动态传递这个变量名。我从源代码动态接收宏参数, 我希望能够传递它们。
的内容$paramater1 = "var1"
$parameter2 = "var2"
$valueForParameter1 = "hello"
$valueForParameter2 = "world"
<@macro printHelloWorld paramater1=valueForParameter1 parameter2=valueForParameter2 />
我想要等同于电话
<@macro printHelloWorld var1="hello" var2="world" />
我无法找到任何解决方案。有什么提示吗?
更多地描述用例
我们实际上有一个freemarker宏,通过Java Tag公开,它接受动态属性。我想能够调用这个宏,并动态地为它提供参数。
答案 0 :(得分:1)
没有语言功能可以做到这一点。有两种可能做类似的事情:
只需将FTL哈希(如public static double distanceOf(Geopoint a, Geopoint b) {
if (a.isValid() && b.isValid()) {
double distFactor = Math.acos(Math.sin(Math.toRadians(a.getLat())) * Math.sin(Math.toRadians(b.getLat()))
+ Math.cos(Math.toRadians(a.getLat())) * Math.cos(Math.toRadians(b.getLat()))
* Math.cos(Math.toRadians(b.getLon()) - Math.toRadians(a.getLon())));
return 6378.388 * distFactor;
}
return -1;
}
)传递给宏,如Map
。在这种情况下,参数值表达式也可以是用Java动态创建的<@myMacro params={'a': 1, 'b': 2}/>
。
另一个是定义像Map
这样的宏,在这种情况下,<#macro myMacro p1 p2 otherParams...>
将<@myMacro p1=11 p2=22 a=1 b=1/>
作为{'a': 1, 'b': 2}
传递。但是,在这种情况下,您无法将外部构造的哈希传递为otherParams
。