2012-03-31 10 views
2

Spring Specification saidとして、マッピングハンドラの前に@ModelAttributeが実行され、@SessionAttributeはセッションでモデル属性を保持します。@ModelAttributeとSpringの@SessionAttribute

以下のシナリオを検討してください。フォームBeanは、コントローラが呼び出された後に作成され、セッション属性として設定されます。次にMenuControllerが呼び出され、createForm()が再度実行され、別の新しいフォームBeanが作成されます。私の質問です:この最新のフォームBeanはセッション属性として設定されますか?どのフォームBeanがbookList()メソッドのパラメータにバインドされますか?

皆さんお手伝い願います。ありがとうございました。

@Controller 
@RequestMapping("/store") 
@SessionAttribute("form") 
public class MenuController { 
    @ModelAttribute("form") 
    public Form createForm() { 
    return new Form(); 
    } 

    @RqeustMapping("/book") 
    public String bookList(@ModelAttribute("form") Form form){ 
    //processing the form 
    } 
} 

答えて

1

マッピングが一般化されていることに注意してください。これは、GETメソッドとPOSTメソッドの両方に対応します。

あなたの要求のマッピングは、GETメソッドである場合は、

セッション属性は、メソッドはCreateFormから@ModelAttribute(「フォーム」)の値を保持します。

属性フォームがPOST要求から返された場合、

セッション属性はCreateFormメソッドから@Model属性をオーバーライドします。

マッピングハンドラの前に@ModelAttributeが実行されることを覚えておくと便利です。

0

sessionAttributeは、「フォーム」がセッションに保存されることを示します。セッションから "フォーム"が取得されたことを意味しません。

関連する問題