2012-01-11 68 views
0

我正在嘗試Spring MVC示例。我有一個具有列表類型變量一樣如何將字符串轉換爲List對象在春天MVC

private List<HashMap<String, String>> books; 

在我的控制器我有

@RequestMapping(value = "/booksList", method = RequestMethod.POST) 
    public String displayBooks(@ModelAttribute TestBean testBean, Model model, HttpSession session) { 
    // some code here 
} 

在我的JSP頁面中我有

<form:form action="booksList.html" method="post" modelAttribute="testBean"> 
     <form:hidden path="books" /> 
    <input type="submit" value="submit"> 
</form:form> 

當我提交這種形式我得到一個testBean就此錯誤

無法將轉換的值請輸入[java.lang.String]至所需類型[java.util.HashMap],查看屬性「books[0]」。

我該如何解決這個錯誤?請幫助

更新時間:

I have seen that我能做到這樣也。

@InitBinder 
public void initBinder(WebDataBinder binder) {    
     binder.registerCustomEditor(List.class, "testBean", new CustomCollectionEditor(List.class) {     
     @Override   
     protected Object convertElement(Object element) { 
      TestBean testBean = new TestBean();     
      if (element != null) { 
       List<HashMap<String, String>> id = (List<HashMap<String, String>>) element; 
       testBean.setFilters(id); 
      } 
      return testBean; 
     } 
     });  
    } 

但我不明白上面的方法完全可能會有一些錯誤,我寫了什麼。我不知道如何以及從哪裏撥打convertElement(Object element)方法。我明白initBinder(WebDataBinder binder)會在我的控制器方法public String displayBooks(...)之前調用jsut。即使我不知道這是否正確。

回答

1

如上所述,您嘗試使用單個文本字段來表示一個極其複雜的類型(ListMap s)。你的第一步應該是確定你想如何在網絡表單中顯示這些信息。然後嘗試使用「罐裝數據」(例如,您已裝載假貨booksTestBean)並查看您的表單是否看起來如何。

如果更改存儲books集合的方式,可能會更容易。有這樣一個複雜的類型作爲「豆」的一部分,而允許,可能不是推薦。考慮使用List<BookBean>,其中BookBean包含BookDetailBean的集合,而BookDetailBean包含您之前在Map中擁有的字符串到字符串關係。