速度模板引擎 - 键值映射

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打印电话.

  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')
Run Code Online (Sandbox Code Playgroud)

这将打印出来:

$myMap.put('key', 'first value')
first value
second value
Run Code Online (Sandbox Code Playgroud)

您可以执行以下两项操作,以便不打印该行:

  1. 将函数的结果存储在临时变量中: #set ($discard = $myMap.put('key', 'value')

  2. 使用静默方法调用: $!myMap.put('key', 'value')

我建议使用第一个,因为当你替换现有值时,第二个仍然会打印出来.


Nat*_*bna 3

您是否尝试过这样做:

#set( $myMap = {} )
Run Code Online (Sandbox Code Playgroud)

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