我在使用Velocity的键值映射时遇到了一些问题。
有人有这个功能的例子吗?
$myMap ={}
$myMap.put("mykey1", "myvalue")
$myMap.delete("mykey1")
$myMap.getValue("mykey1")
答案 0 :(得分:17)
正如内森所说,你应该使用:
#set ($myMap = {})
创建新地图并将其分配给变量。
现在,为什么要打印put
来电。
打印任何不在指令内的内容,例如#set(not printed)
或#if(not printed)
或#foreach(again not printed)
,包括自由文本,变量和方法调用强>
Velocity无法区分$myMap.get('mykey')
和$myMap.put('key', 'value')
,因此会打印put
来电的结果。
每当无法正确评估某些内容时,由于未定义变量或某个方法返回null
,因此无法评估的代码会逐字地转储到输出中。 / p>
正如put
方法的文档所述,该函数返回为该键存储的先前值,如果没有设置任何值,则返回null
。
总结一下,打印这条线是正常的。
要尝试这个理论,你可以这样做:
#set ($myMap = {})
$myMap.put('key', 'first value')
$myMap.put('key', 'second value')
$myMap.get('key')
将打印出来:
$myMap.put('key', 'first value')
first value
second value
您可以执行两项操作,以便不打印该行:
将函数的结果存储在临时变量中:#set ($discard = $myMap.put('key', 'value')
使用静默方法调用:$!myMap.put('key', 'value')
我建议使用第一个,因为当您替换现有值时,第二个仍然会打印出来。
答案 1 :(得分:3)
你有没有尝试过:
#set( $myMap = {} )
此外,请确保您使用的是现代版本的Velocity。古代的人在VTL中没有地图语法。