我在 Velocity 中使用键值映射时遇到了一些问题。
有人有这个功能的例子吗?
$myMap ={}
$myMap.put("mykey1", "myvalue")
$myMap.delete("mykey1")
$myMap.getValue("mykey1")
我在 Velocity 中使用键值映射时遇到了一些问题。
有人有这个功能的例子吗?
$myMap ={}
$myMap.put("mykey1", "myvalue")
$myMap.delete("mykey1")
$myMap.getValue("mykey1")
正如内森所说,你应该使用:
#set ($myMap = {})
创建一个新地图并将其分配给一个变量。
现在,为什么要put
打印呼叫。
任何不在指令内的内容,例如#set(not printed)
or#if(not printed)
或#foreach(again not printed)
,都会被打印出来,包括自由文本、变量和方法调用。
Velocity 无法区分$myMap.get('mykey')
and $myMap.put('key', 'value')
(reader vs. writer) 的不同语义,所以put
会打印调用的结果,就像任何其他方法一样。
每当由于未定义变量或方法返回的某处而无法正确评估某些内容时null
,无法评估的代码将按字面意思转储到输出中。
正如该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')
我推荐第一个,因为当您替换现有值时,第二个仍然会打印一些东西。
Did you try doing:
#set( $myMap = {} )
Also, make sure you are using a modern version of Velocity. Ancient ones did not have map syntax in VTL.