Wag*_*ner 10 apache templates velocity transformation
我有一些问题,我使用键值映射到Velocity.
有人有这个功能的例子吗?
$myMap ={}
$myMap.put("mykey1", "myvalue")
$myMap.delete("mykey1")
$myMap.getValue("mykey1")
Run Code Online (Sandbox Code Playgroud)
Ser*_*riu 17
正如内森所说,你应该使用:
#set ($myMap = {})
Run Code Online (Sandbox Code Playgroud)
创建新地图并将其分配给变量.
现在,为什么要put打印电话.
打印任何不在指令中的内容,例如#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')
Run Code Online (Sandbox Code Playgroud)
这将打印出来:
$myMap.put('key', 'first value')
first value
second value
Run Code Online (Sandbox Code Playgroud)
您可以执行以下两项操作,以便不打印该行:
将函数的结果存储在临时变量中: #set ($discard = $myMap.put('key', 'value')
使用静默方法调用: $!myMap.put('key', 'value')
我建议使用第一个,因为当你替换现有值时,第二个仍然会打印出来.
您是否尝试过这样做:
#set( $myMap = {} )
Run Code Online (Sandbox Code Playgroud)
另外,请确保您使用的是现代版本的 Velocity。古代的 VTL 中没有映射语法。