2013-12-18 11 views
0

我有一個綁定到Spring模型的HTML表單,以接收用戶數據並將其添加到數據庫中。這工作正常。我已經使用Spring Freemarker宏爲字段在發送前進行輸入和驗證,例如春季格式的Freemarker複選框輸入

<@spring.formInput path="myForm.username"/> 
<@spring.showErrors ", "/> 

這也工作正常進行文字輸入。什麼導致我的問題是用Spring宏渲染多個複選框。我原來的HTML是:

<input name="roleList" type="checkbox" value="1"/>Adminstrator 
<input name="roleList" type="checkbox" value="2"/>Developer 
<input name="roleList" type="checkbox" value="3"/>Customer 

我創建一個Java Map<String, String>的,在我的控制方法的關鍵是「1」,「2」,「3」這一信息,並將其添加到模型,再換成HTML本宏在我FTL模板:

<@spring.formCheckboxes path="quickForm.roleList" options="${roleMap}" separator="<br>"/> 

但我得到一個錯誤

Expecting a string, date or number here, Expression roleMap is instead a freemarker.template.SimpleHash 

它爲什麼會放棄該消息,如果它需要一個地圖? (如Spring文檔中的FreeMarker宏)任何人都可以解釋我應該如何提供複選框數據?

回答

3

最後解決了這個問題,所以對於任何感興趣的人來說:它不像創建一個值的HashMap並將其添加到model.addAttribute("roleMap", myHash)那樣簡單 - 我必須創建一個服務類來完成此操作:它檢索我的列表來自數據庫表的角色,然後將它們轉換爲HashMap<String, String>。然後,我在我的控制器方法叫這個,把它添加到我的模型(稱爲「roleMap」在這裏),我的Freemarker模板內使用它,而不通常的格式,如:

<@spring.formCheckboxes path="quickForm.roleList" options=roleMap separator="<br>"/> 

具有轉換的數據一個服務方法是Spring用它作爲複選框選項的關鍵。

+2

只要提一下,我認爲這裏的實際問題的診斷是不正確的。我已經完成了你描述的同樣的事情,在我的控制器中創建地圖並將它們添加到模型中,並且它工作正常,中間沒有複雜的服務。我的猜測是這裏的關鍵是從'options = $ {roleMap}'改變爲'options = roleMap' – DaveyDaveDave