速度模板引擎 - 键值映射

时间:2013-05-06 11:48:03

标签: apache templates transformation velocity

我在使用Velocity的键值映射时遇到了一些问题。

有人有这个功能的例子吗?

$myMap ={}

$myMap.put("mykey1", "myvalue")
$myMap.delete("mykey1")
$myMap.getValue("mykey1")

2 个答案:

答案 0 :(得分:17)

正如内森所说,你应该使用:

#set ($myMap = {})

创建新地图并将其分配给变量。

现在,为什么要打印put来电。

  1. 打印任何不在指令内的内容,例如#set(not printed)#if(not printed)#foreach(again not printed),包括自由文本,变量和方法调用

  2. Velocity无法区分$myMap.get('mykey')$myMap.put('key', 'value'),因此会打印put来电的结果。

  3. 每当无法正确评估某些内容时,由于未定义变量或某个方法返回null,因此无法评估的代码会逐字地转储到输出中。 / p>

  4. 正如put方法的文档所述,该函数返回为该键存储的先前值,如果没有设置任何值,则返回null

  5. 总结一下,打印这条线是正常的。

  6. 要尝试这个理论,你可以这样做:

    #set ($myMap = {})
    $myMap.put('key', 'first value')
    $myMap.put('key', 'second value')
    $myMap.get('key')
    

    将打印出来:

    $myMap.put('key', 'first value')
    first value
    second value
    

    您可以执行两项操作,以便不打印该行:

    1. 将函数的结果存储在临时变量中:#set ($discard = $myMap.put('key', 'value')

    2. 使用静默方法调用:$!myMap.put('key', 'value')

    3. 我建议使用第一个,因为当您替换现有值时,第二个仍然会打印出来。

答案 1 :(得分:3)

你有没有尝试过:

#set( $myMap = {} )

此外,请确保您使用的是现代版本的Velocity。古代的人在VTL中没有地图语法。