velocity - 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 Engine 1.7 不会将方法参数转换为预期类型。所以如果$field.ID
是一个数字,你必须用双引号将它括起来才能得到一个字符串:
$valuesMap.get("$field.ID")
否则,引擎根本找不到合适的方法来调用。
从 2.0 开始,Velocity Engine 将自动将方法参数转换为预期类型,并且您的代码将按预期工作。