爲#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