我有一些问题我使用Velocity的键值映射。
有人有这个function的例子?
$myMap ={} $myMap.put("mykey1", "myvalue") $myMap.delete("mykey1") $myMap.getValue("mykey1")
正如Nathan所说,你应该使用:
#set ($myMap = {})
创建一个新的地图并将其分配给一个变量。
现在,为什么打印电话呢?
任何不在指令内部的指令,如#set(not printed)
或#if(not printed)
或#foreach(again not printed)
被打印,包括自由文本,变量和方法调用 。
Velocity无法区分$myMap.get('mykey')
和$myMap.put('key', 'value')
,所以打印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')
我会推荐第一个,因为当你替换现有的值时,第二个仍然会打印一些东西。
你有没有尝试过:
#set( $myMap = {} )
另外,请确保您使用的是Velocity的现代版本。 古代的在VTL中没有地图语法。