2011-09-14 8 views
0

私はアプリケーションクラスに親クラスとその子を持っています。
そして、次のコントローラのメソッドがあります。spring-mvcのコントローラに子クラスを渡すには?

@RequestMapping(method=RequestMethod.POST, value="/page") 
public String postMethod(Model model, Parent obj, BindingResult result) { 
    // do something 
} 

をしかし、私はフォームで投稿された子クラスのインスタンスを処理できるようにしたいです。
どうすればいいですか?

答えて

1

あなたは、暗黙的なモデル属性として必要なタイプのオブジェクトを作成することができます

@ModelAttribute("parent") 
public Parent createChild(@RequestParam("type") String type) { 
    if ("foo".equals(type)) return new Foo(); 
    else if ("bar".equals(type)) return new Bar(); 
    else return null; 
} 

春が自動的にフォームに渡されたオブジェクトの種類を覚えていないので、あなたが追加することによって、それを自分で行う必要がありますその値がオブジェクトの型を指定する隠しフォームフィールド(上記の例ではtypeフィールド)。

もう1つの方法は、オブジェクトをセッションに保存して最初から作成しないようにすることです。 @SessionAttributesアノトーンを使用して設定できます。15.3.2.9 Specifying attributes to store in a session with @SessionAttributesを参照してください。

+0

"@RequestParam(" type ")String型"サーバーに404エラーを送信しようとしているときに、 "type"パラメータの意味を教えてください。 – tsds

+0

クライアントから送信された要求は構文的に間違った())、しかし私はオブジェクトがどのように送られたかを区別するための何らかの方法が必要です。この型のパラメータを自分のフォームにハードコードするか、春に自動的に渡すことができますか? – tsds

+1

@tsds:更新されました。 – axtavt

関連する問題