2014-01-21 89 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