2014-01-21 57 views
0

在我的搜索变量设置,我想确认:性能与速度

我想设置变量速度变量类型的属性:

#set($infos.get("trackerData").get(0).get("info_suivi")=tracking.status) 

我的属性文件包含:

tracking.status.liv=livré 
tracking.status.env=envoyé 
tracking.status.cmd=commandé 
tracking.status.err=erreur 
tracking.status.ann=annulé 

和$相关信息是地图

是它的正确语法?

谢谢。

回答

0

#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,以及其他一些并未处理变量的其他变量。属性文件是否应该用作本地化资源?然后,您需要将它们加载到ResourceBundleProperties对象中,将该对象放置在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')}")) 
+0

非常感谢的Sergiu! – Ale