首页 > 解决方案 > Velocity 模板 - 检索 hashmap 值

问题描述

我有一个 HashMap< String, List> 我在 Java 类中填充它。当我尝试在 Velocity 模板中打印出来时,它看起来很好。

$!valuesMap ##gives {33=[texxxxt], 34=[2019-03-31], 35=[admin], 37=[P1], 40=[value1, value2]}

当我尝试直接访问这些值时,它看起来也很好。

$!valuesMap.get("40") ##gives [value1, value2]

当我尝试使用动态变量访问地图时出现问题。我有一个我迭代的对象列表,每个对象都有一个 ID。但是我不知道如何使用这个 ID 从地图中检索值。

#foreach( $field in $fields )
    $!field.ID ##gives the id of the object, i.e. 40

    ##I would assume this would give me [value1, value2] when ID is 40, but it returns nothing
    $!valuesMap.get($!field.ID) 
#end

我尝试将 ID 分配给一个新变量(变量本身打印得很好,但是当我再次尝试访问地图时,我什么也没得到)。我已经尝试过这里建议的符号,但什么都没有打印出来,老实说,它把我逼疯了,因为我可能遗漏了一些非常简单的东西,但不知道它是什么。

标签: velocity

解决方案


Velocity Engine 1.7 不会将方法参数转换为预期类型。所以如果$field.ID是一个数字,你必须用双引号将它括起来才能得到一个字符串:

$valuesMap.get("$field.ID")

否则,引擎根本找不到合适的方法来调用。

从 2.0 开始,Velocity Engine 将自动将方法参数转换为预期类型,并且您的代码将按预期工作。


推荐阅读