为#set
主要用例是将值分配给变量:
#set ($variable = 'value')
的二次用例,这仅适用于较新版本的速度的,就是将值分配给对象属性,如果有对于那些性能一个setter(即对象是一个简单的bean):
#set ($object.property = 'value')
## Same as:
$object.setProperty('value')
通过一些神奇的速度,这也适用于地图和索引列表:
#set ($map = {})
#set ($map.key = 'value')
$map
## Same as:
$map.put('key', 'value')
## ...except that it doesn't print the previous value stored in the map
#set ($array = ['original'])
#set ($array[0] = 'changed')
$array
## Same as:
$array.set(0, 'changed')
## ...except that it doesn't print the previous value stored in the array
但它永远不能为另一个值赋值。 $infos.get("trackerData").get(0).get("info_suivi")
以getter结束,所以它会返回一个值。几乎所有的编程语言都不可能为另一个值赋值。
二,#set ($something = tracking.status)
无论是什么$something
都是无效的。如果您尝试它会给出语法错误。除了知道的极少数关键字提供的内容之外,Velocity没有任何本机功能:迭代变量的#foreach
,测试变量的#if
,更改变量的#set
,以及其他一些并未处理变量的其他变量。属性文件是否应该用作本地化资源?然后,您需要将它们加载到ResourceBundle
或Properties
对象中,将该对象放置在VelocityContext
中,然后通过调用用于根据键获取值的Java类的方法来使用它。对于ResourceBundle
,这是getString('key')
,对于Properties
对象只是get('key')
。
第三,属性文件具有以tracking.status
作为前缀的键,tracking.status
本身不是实际属性。你如何获得实际状态?您是否真的试图通过在info_suivi
属性后面加上tracking.status.
后面的值来获取密钥?然后,假设属性文件通过$messages
暴露出来,这应该工作:
$messages.getString("tracking.status.${infos.get('trackerData').get(0).get('info_suivi')}")
如果你想,而不是存储在这个变量直接打印吧:
#set ($infoSuivi = $messages.getString("tracking.status.${infos.get('trackerData').get(0).get('info_suivi')}"))
非常感谢的Sergiu! – Ale