2011-05-01 118 views
4

我有以下代碼如何在速度中動態地添加屬性到地圖?

$pageName = "test"; 

$Container = {}; 

我喜歡通過可變設定的$Container一個屬性。我試過$Container.set("test", $pageName);。它沒有提出任何錯誤,但$Container.test$Container.get("test");什麼都不顯示。

我該如何解決?

+1

ah..sorry guys..just找到了解決辦法。而不是使用組,我需要使用放 – Moon 2011-05-01 02:41:35

回答

12

問題是該集是錯誤的方法。你需要做一個放。記住 - Velocity正在調用Java方法。 Map對象上沒有「set」方法。

具體來說,你可以做

$Container.put("test", $pageName) 

現在,一個奇怪的事情是,這將在頁面上打印「真」或「假」,因爲Map.put()方法返回一個布爾值。所以,我總是做

#set($dummy = $Container.put("test", $pageName)) 

這確實認沽和另一個參考將結果(然後你就可以忽略),而不是它的渲染頁面。

+0

什麼如果你想要遍歷映射中的鍵並動態更新它,我發現當你的「$ value = $ arr.get($ key)」鍵的值,修改它,然後「$ arr .put($ val)「,因爲它們都是r,所以地圖中的所有條目都是最後一個條目參照相同的「$ val」 – 2016-08-12 17:22:50

0

嘿,我遇到了同樣的問題是在頁面上打印的「真」或「假」,並有一個更簡單的方法來處理它。我做的有點奇怪,我做了Confluence,這當然使用Velocity。我提到,因爲我瞭解Velocity可以用於不同的應用程序。

使用Confluence用戶宏,我檢查先前在req變量,請求變量(即「myPageVars」)上創建的屬性。然後,我使用put方法根據宏參數放置新的鍵值對。通過使用$!前綴,而不僅僅是$,輸出不會發送到屏幕。

... $!req.getAttribute( 「myPageVars」)。把($ paramKey,$ paramValue) ...

我有點新的速度,所以我不能保證這一點將在每一個方面的工作,但似乎比語法全#SET($啞等線路更容易。

相關問題