データバインディング

ログイン処理を少しだけ改造します。改造ポイントは、LoginCtrl.javaの以下の2行を、SpringMVCに
自動でやってもらうことです。

UserBean.java追加

まずは、account と password を格納する入れ物( JavaBean )を追加します。
パッケージ com.jxpath.springweb.login に UserBean.java を下記のように追加します。

LoginCtrl.formBackingObject() 改造

つぎに、LoginCtrl.fromBackingObject()メソッドを、以下のように書き換えて、戻り値を
Object から UserBean のインスタンスに変更します。

LoginCtrl.onSubmit() 改造

最後に、LoginCtrl.onSubmit()メソッドの、削減対象 2行を削除して、下記のようにします。

動作確認

では、mvn コマンドでビルドして、Tomcatを再起動してください。
ログインできましたか? ログインできたということは、onSubmit()の引数 aCommandが
UserBean型になっていて、しかも account と password の2つのパラメータを、HTMLの画面から
セット済みという動きが完成している訳です。
実感がない人は、LoginCtrol.onSubmit() に Eclipseでブレークポイントを張って確認してみてください。

たかが LoginCtrl.javaから getParameter している2行を削るだけなのに、たくさん変更して面倒だ
という方。来週まで辛抱してください。aCommand 引数が UserBean に化けているというご利益は
もうちょっと話が進むと、便利に思えてくるようになりますので。

データバインディングのからくり

SpringMVCでは、データバインディングは、以下のルールで実現されています。

  1. HTTP/POSTでアクセスされたとき
  2. formBackingObject()の戻り値にObjectに対して
  3. HTMLから送信されたパラメータの setterメソッドがあれば呼び出す
  4. Objectを onSubmit() の引数 aCommand に格納する

なんとなく分かりますでしょうか。
「formBackingObject()の戻り値を new UserBean() 」にした理由。
「UserBeanクラスに、account と password のsetterメソッドを作成 」した理由。
「onSubmitメソッドで、aCommandを UserBean型にキャスト 」した理由。
全ては、SpringMVCの裏方の挙動をサポートし、利用するためだったのです。

ここで問題です。

HTMLの送信データに、account, password に加えて、aaa というパラメータを追加するには、
何をすればよいでしょうか?

答え

  1. login.jspに aaa というname属性を持つ inputタグを追加する
  2. UserBean にメンバ変数 aaa を追加し、setAaa() という setterメソッドを追加する
わかりますか?