Apache速度占位符插值

Apache速度占位符插值,apache,interpolation,velocity,Apache,Interpolation,Velocity,也许是因为在英国,今天是星期五下午,我的大脑决定放慢速度,急切地期待着周末的到来,但我已经用ApacheVelocity把自己弄到了一个兔子洞里,我希望你们中的一个可爱的互联网用户能够再次启动我的大脑 我的疯狂用例如下所示: #foreach( $item in $array ) #set($myVariable = "#customDirective('a.key.with.the.${foreach.index}')") #end 我有一个for循环来遍历一个列表,然后对该列表中的

也许是因为在英国,今天是星期五下午,我的大脑决定放慢速度,急切地期待着周末的到来,但我已经用ApacheVelocity把自己弄到了一个兔子洞里,我希望你们中的一个可爱的互联网用户能够再次启动我的大脑

我的疯狂用例如下所示:

#foreach( $item in $array )
    #set($myVariable = "#customDirective('a.key.with.the.${foreach.index}')")
#end
我有一个for循环来遍历一个列表,然后对该列表中的每个项目调用一个自定义指令,该指令接受一个参数,该参数是一个预定义的键,循环索引构成该键的一部分。我将自定义指令的结果设置为一个变量,这样就可以进一步使用它

现在,我知道单引号(')内的任何内容都被视为文字,双引号(“)内的任何内容都被解析。因此,我看到的情况是,当我注销自定义指令中的输入参数时,${foreach.index}没有被解析为值,而是被视为字符串文字

在这种情况下,为指令构造输入参数的正确方法是什么


我使用的是Velocity 2.0版,但如果需要,我可以升级或降级。

在周五下午,最好将评估分为两行:

#foreach( $item in $array )
    #set($arg = "a.key.with.the.${foreach.index}")
    #set($myVariable = "#foo($arg)")
#end
把一行留到周一早上:

#foreach( $item in $array )
    #set($myVariable = "#foo(""a.key.with.the.${foreach.index}"")")
#end
其基本原理是需要两级插值,因此需要对内部双引号进行转义(因此是双引号)