【问题标题】:Apache Velocity Placeholder InterpolationApache Velocity 占位符插值
【发布时间】:2019-06-07 13:42:25
【问题描述】:

也许是因为现在是英国的星期五下午,我的大脑已经决定放慢速度,急切地期待周末,但我已经用 Apache Velocity 让自己陷入了困境,我希望你们中的一个可爱互联网上的人将能够重新启动我的大脑。

我的疯狂用例如下:

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

我有一个 for 循环来遍历一个列表,然后对于该列表中的每个项目,我调用一个自定义指令,该指令接受一个参数,该参数是一个预定义的键,循环索引构成其中的一部分。我将自定义指令的结果设置为一个变量,以便以后可以使用它。

现在,我知道单引号 (') 内的任何内容都被视为文字,而双引号 (") 内的任何内容都会被解析。所以我看到发生的事情是,当我注销自定义指令,${foreach.index} 没有被解析为一个值,而是被视为字符串文字。

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

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

【问题讨论】:

    标签: apache interpolation velocity


    【解决方案1】:

    在星期五下午,最好将评估分成两行:

    #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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      相关资源
      最近更新 更多