apache Velocity模板引擎-键值Map

z18hc3ub  于 2022-11-16  发布在  Apache
关注(0)|答案(3)|浏览(183)

我在Velocity中使用键值Map时遇到了一些问题。
有人有这个功能的例子吗?

$myMap ={}

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

dgenwo3n1#

正如 内森 所说 , 你 应该 使用 :

#set ($myMap = {})

中 的 每 一 个
若 要 创建 新 Map 并 将 其 分配 给 变量 , 请 执行 以下 操作 。
现在 , 为什么 输出 put 调用 。
1.任何 不在 指示 词 内 的 项目 , 例如 #set(not printed)#if(not printed)#foreach(again not printed) , 都会 打印 出来 , 包括 自由 文字 、 变数 和 * * 方法 呼叫 * * 。

  1. Velocity 无法 区分 $myMap.get('mykey')$myMap.put('key', 'value') 的 不同 语义 ( 读取 器 与 写入 器 ) , 因此 put 调用 的 结果 将 被 打印 出来 , 就 像 任何 其他 方法 一样 。
    1.每当 由于 变量 未 定义 或 某 个 方法 返回 null 而 导致 无法 正确 求值 时 , 无法 求值 的 代码 就会 被 直接 转储 到 输出 中 。
    1.正如 put 方法 的 文档 所 述 , 该 函数 返回 为 该 键 存储 的 上 一 个 值 , 如果 根本 没有 设置 值 , 则 返回 null
    1.总 而言 之 , 这 句 话 被 印 出来 是 很 正常 的 。
    要 尝试 这个 理论 , 可以 这样 做 :
#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')
1.使用 静默 方法 调用 :$!myMap.put('key', 'value')
我 建议 使用 第 一 种 方法 , 因为 当 您 替换 现有 值 时 , 第 二 种 方法 仍然 会 打印 一些 内容 。

oprakyz7

oprakyz72#

您是否尝试执行:

#set( $myMap = {} )

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

syqv5f0l

syqv5f0l3#

只需将!添加到不打印输出:$!myMap.put(“键”,“第二个值”)

相关问题