速度模板引擎 – 键值映射

我有一些问题我使用Velocity的键值映射。

有人有这个function的例子?

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

正如Nathan所说,你应该使用:

 #set ($myMap = {}) 

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

现在,为什么打印电话呢?

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

  2. Velocity无法区分$myMap.get('mykey')$myMap.put('key', 'value') ,所以打印put调用的结果。

  3. 每当某个东西不能被正确评估时,因为一个变量没有被定义,或者沿着某个方向返回一个null ,所以没有被评估的代码被逐字地转储到输出中。

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

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

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

 #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')

我会推荐第一个,因为当你替换现有的值时,第二个仍然会打印一些东西。

你有没有尝试过:

 #set( $myMap = {} ) 

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