Apache Velocity 占位符插值

Apache Velocity Placeholder Interpolation

可能是因为在英国这里是周五下午,我的大脑已经决定放慢速度,因为对周末的热切期待,但我已经让自己陷入了 Apache Velocity 的困境,我希望其中之一互联网上可爱的人们将能够重新启动我的大脑。

我疯狂的用例如下:

#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

周一早上离开 one-liners:

#foreach( $item in $array )
    #set($myVariable = "#foo(""a.key.with.the.${foreach.index}"")")
#end

基本原理是你需要两级插值,所以你需要转义(因此加倍)内部双引号。