はじめに
DreamHanksの松下です。
前回は画面入力されたものをサーバーに送る(リクエストを送る)ところまで解説しました。
今回は受け取ったリクエストパラメータが正しいものが入力されているかを検証する
ヴァリデーションチェックについて解説していきたいと思います。
動的にWebアプリを作るということ
動的なWebページとは、同じURLをリクエストされた場合でも
アクセスした人に応じてページの見え方を変えて提供するページのことです。
例えばECサイト(ネットショッピングができるサイト)やYouTubeなどの動画サイトで、
自分の閲覧履歴やお気に入りに追加した情報などを加味してページが構成され、
アクセスした人それぞれの好みや行動の傾向に合わせたページが提供されます。
こういった動的にWebページを作る方法の一つとして「サーブレット」があります。
サーブレットって具体的になに?
サーブレットとは受け取ったリクエストによって、返すレスポンスを変える仕組みそのものを指す言葉です。
Javaプログラムのソースコードで言うと、controllerクラスのメソッドを指します。
上記のように各メソッドが受け取ったリクエストによって、動的にレスポンス(JSP)を返します。
ヴァリデーションチェックのやり方
ヴァリデーションチェック自体はFormクラス内で行われます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package com.dreamhanks.form; import javax.validation.constraints.Size; import org.hibernate.validator.constraints.NotEmpty; public class LoginForm { @NotEmpty(message="空欄は不可です。パスワードを入力してください。") @Size(max = 10, message="最高10桁以内でパスワードを入力ください。") private String password; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } |
アノテーションについて
1 2 3 |
@NotEmpty(message="空欄は不可です。パスワードを入力してください。") @Size(max = 10, message="最高10桁以内でパスワードを入力ください。") private String password; |
Formクラス内で定義されているエンティティ一つ一つにアノテーションを使って
入力チェックする内容を設定できます。
アノテーションの種類については無数にあるので、その都度調べながら記述していきます。
上記のように、バリエーション違反した場合のメッセージの設定もできます。
「@Valid LoginForm aa」のように、@Validをつけましょう。
相関チェックについて
1 2 3 4 5 6 |
// 勤務時間の相関チェック @AssertTrue(message="出社時間は退社時間以前を入力してください。") public boolean isDateValid() { if (startTime.compareTo(endTime) == -1) return true; return false; } |
@AssertTrueを使うと、相関チェックができます
相関チェックは、複数の項目に入力された値の妥当性のチェックです。
項目Aの入力値と、項目Bの入力値と、項目Cの入力値と、・・・に
妥当性があるかどうかを制限するチェックです。
例)転記日付が登録日付より前の日付ではないこと
BindingResultについて
BindeingResultとはFormクラス内で入力チェックを行った結果を受け取るものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/** * ログイン画面で入力されたパスワードの整合性を判定するメソッド * @param aa ログイン画面の入力値を保存するform * @param result 入力値のバリデーション結果 * @param model ControllerからViewに値を受け渡すためのパラメータ * @return ログイン画面のJSPファイル名 or 勤務時間選択画面のJSPファイル名 */ @RequestMapping(value = "/loginProcess") public String loginProcess(HttpSession session, @ModelAttribute("loginForm") @Valid LoginForm aa, BindingResult result, Model model) { // ヴァリデーションチェック不正がある場合 // result.hasErrors()の意味はエラーがある場合にtrueをreturnするメソッド if (result.hasErrors()) { return "login"; } // 以下省略 |
上記のようにメソッドの引数に定義することで、入力チェックの結果を受け取れます。
IF分でBindeingResultの変数に対して「.hasErrors()」関数を使って、結果のture/falseを取得できます。
この真偽の結果によって、ログイン画面に戻し、エラーメッセージを描画するか
この後の処理に行くかを決めます。
最後に
今回はサーブレットとは何か?・ヴァリデーションチェックのやり方について解説しました。
次回は入力されたユーザ情報であるpasswordがDBのユーザ情報と一致しているか?という
ビジネスロジックについて解説していきます
お読みいただきありがとうございました。
コメント