4

Spring 仕様が述べたように、@ModelAttribute はマッピング ハンドラーの前に実行され、@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
     }
}
4

3 に答える 3

1

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

リクエスト マッピングが GET メソッドの場合、

セッション属性は、メソッド createForm からの @ModelAttribute("form") の値を保持します。

アトリビュート フォームが POST リクエストから返された場合、

セッション属性は、createForm メソッドの @Model 属性をオーバーライドします。

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

于 2012-04-16T10:00:56.677 に答える