2012-01-11 16 views
0

私はSpring MVCの例を試しています。私は取得しています。このフォームを送信すると、私は春のListオブジェクトをStringに変換する方法MVC

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

を持っている私は、JSPページで

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

を持って私のコントローラで

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

のようなリスト型の変数を持つtestBeanを持っていますこのエラー

値を変換できません[java.lang.String]をプロパティ「books[0]」に必要なタイプ[java.util.HashMap]に入力します。

どうすればこのエラーを解決できますか?

更新助けてください:

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

上記のように、1つのテキストフィールドで非常に複雑なタイプ(ListMap)を表現しようとしています。あなたの最初のステップは、Webフォームでその情報をどのように表示するかを検討する必要があります。次に、「缶詰のデータ」(例:、偽物booksでロードしたもの)を使用して、あなたのフォームが期待通りに見えるかどうかを確認してください。

booksコレクションの保存方法を変更した方が簡単です。 にはが許可されていますが、このような複雑なタイプは "bean"の一部として存在しますが、おそらくは推奨されていません。です。 List<BookBean>を使用することを検討してください。BookBeanにはBookDetailBeanのコレクションがあり、BookDetailBeanには、以前はMapにあった文字列と文字列の関係が保持されています。

関連する問題