SpringMVCで@ModelAttributeアノテーションを使用する方法

SpringMVCで@ModelAttributeアノテーションを使用する方法

以下は「SpringMVCでデータ送信(POST)する 」で作成したコントローラです。

@ModelAttributeを使っていませんがmodel.addAttribute~でアクションフォームのインスタンスを格納していました。

homeメソッドの引数にアクションフォームを変更し、model.addAttribute~の行をコメントアウトします。

引数で指定することで、明示的にmodel.addAttributeする必要がなくなります。

裏で、model.addAttribute(new HomeForm());が実行されているようなイメージです。

※model.addAttribute(“homeForm”,new HomeForm());と同じ

JSP側はなにも変更せずに、modelAttribute属性にはhomeFormを指定しています。

では@ModelAttributeアノテーションを使用してみます。引数の前に記述します。

このままだと「Neither BindingResult nor plain target object for bean name ‘homeForm’ available as request attribute」とJSP側でエラーが出るので、modelAttribute属性にaFormと記述します。

これで属性名を変更して正常に動作します。

メソッドに対して@ModelAttributeアノテーションを指定できる

@ModelAttributeアノテーションをメソッドの上に指定するとまた意味合いが違ってきます。

setFormメソッドが実行されインスタンスが返されます。その次にhomeメソッドが実行されて、これも正常に動作します。

この時、JSP側のmodelAttribute属性にはhomeFormを指定すること(アクションフォーム(ビーン)クラスのキャメルケースにしておく必要がある)

@ModelAttributeアノテーションの役割とは

上記のとおり、@ModelAttributeアノテーションでjspとアクションフォーム(ビーンって言えばわかりやすい?)の指定した別名で連携をするだけのアノテーションです。

SpringMVCで@ModelAttributeアノテーションを使用する

スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA