入力値のバリデート

今週の最後は、入力値のバリデートです。バリデートって何?と聞かれると、早い話が
「入力項目に不備があったら、門前払いして、jspに戻す」ということです。
例としては、以下のような「門前払い」が考えられます。

  • 入力必須項目が未記入だった
  • 半角数値の入力欄に、数値以外の文字列が入っていた
  • 6文字以上の文字列が必要なのに、文字列長が足りなかった

Login時のバリデート実装

本記事では、Login時にaccountが空欄だと、バリデートエラーとする例を実装します。
SimpleFormController には、下記の バリデートを組み込む場所が準備されており、
validateでエラーを検出すると、そもそも onSubmit() をコールせずに、login.jspに戻ります
( onSubmit()をコールしないというのが「門前払い」の意味 )

  1. login.jspでformを post 送信する
  2. LoginCtrl.formBacking()メソッドを実行する
  3. LoginCtrlのvalidatorを起動し、エラーがあれば、formViewに戻る

LoginValidator.javaを追加

最初に、LoginCtrl に登録する LoginValidator.java を作成します。

  • パッケージは、com.jxpath.springweb.login にします(パッケージ名に制約はありません)
  • クラス名は LoginValidatorにします( クラス名に制約はありません )
  • 作成するクラスは、implements Validator を必須とします。
  • Validator.support()メソッドの実装が必須です。
  • Validator.validate()メソッドの実装が必須です。

vaidate()メソッドでは、エラーを検出すると、aErrors.rejectValue() でエラーを検出した
プロパティ名( ソースの例では UserBean.account ) と、そのエラーメッセージを登録します。
aErros.rejectValue()を一度でもコールすると、バリデートエラーを設定したことになります。

LoginValidator.javaを DIコンテナに登録

作成した LoginValidator.javaに idを設定して、DIコンテナに登録します。
BaseBeans.xml に下記のように追記して下さい。

LoginCtrl に validatorを登録

上記の id="loginValidator"を、LoginCtrlに登録します。
今度は、SpringWeb2-servlet.xml の loginCtrlの宣言箇所に、下記のように追記ください。

バリデートエラーを表示

最後に、login.jspに バリデートエラーの内容を表示します。
login.jspの account の入力欄に以下のように <c:out value="${status.errorMessage}"/>を
追記してください。
spring:bind の機能で、accountに関連したバリデートエラーメッセージは、status.errorMessageとして
参照することができます。

動作確認

SpringWeb2を mvn package して、tomcatを再起動してください。
わざと、accountを空欄にして ログイン要求を行うと、バリデートエラーが表示されますね。

一応説明完了

ここまでで、最初にご紹介した SpringWeb アプリに使われている SpringMVCの技法は
全て網羅しています。SpringWeb2は、同じような説明になるソースの修正箇所は省略していますが
ここまでの説明で、読者の皆さんは、自力で jspのカスタマイズや Conrtolクラスの追加ができると思います。

来週は、チャレンジ項目として、SpringのAOPの機能を使って、SpringWeb2に機能拡張を
してみるつもりです。