Velocity Template engine - key-value-map

对着背影说爱祢 提交于 2019-11-27 07:47:32

问题


I have some problems wo use a key-value-map into Velocity.

Someone has an example of this functionality?

$myMap ={}

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

回答1:


As Nathan said, you should use:

#set ($myMap = {})

to create a new map and assign it to a variable.

Now, why is the put call printed.

  1. Anything that is not inside a directive, like #set(not printed) or #if(not printed) or #foreach(again not printed), is printed, including free text, variables, and method calls.

  2. Velocity can't distinguish between $myMap.get('mykey') and $myMap.put('key', 'value'), so the result of the put call is printed.

  3. Whenever something can't be properly evaluated, because a variable is not defined or somewhere along the line a method returns null, the code that failed to be evaluated is dumped literally into the output.

  4. As the documentation of the put method states, the function returns the previous value stored for that key, or null if no value was set at all.

  5. Summing it all up, it's normal to get that line printed.

To try this theory out, you can do this:

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

This will be printed:

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

There are two things you can do so that the line isn't printed:

  1. Store the outcome of the function in a temporary variable: #set ($discard = $myMap.put('key', 'value')

  2. Use the silent method call: $!myMap.put('key', 'value')

I'd recommend the first one, since the second one will still print something when you're replacing an existing value.




回答2:


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.



来源:https://stackoverflow.com/questions/16398116/velocity-template-engine-key-value-map

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!