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アノテーションを使用する

関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
Python3.6,Djangoを勉強中です,Javaは少し飽きてしまってます–;
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくば、我に七難八苦を与えたまえ」です^^

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

コメントをどうぞ

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

CAPTCHA