はじめに
DreamHanksの松下です。
前回は画面入力されたものをサーバーに送る(リクエストを送る)ところまで解説しました。
今回は受け取ったリクエストパラメータが正しいものが入力されているかを検証する
ヴァリデーションチェックについて解説していきたいと思います。
動的にWebアプリを作るということ
動的なWebページとは、同じURLをリクエストされた場合でも
アクセスした人に応じてページの見え方を変えて提供するページのことです。
例えばECサイト(ネットショッピングができるサイト)やYouTubeなどの動画サイトで、
自分の閲覧履歴やお気に入りに追加した情報などを加味してページが構成され、
アクセスした人それぞれの好みや行動の傾向に合わせたページが提供されます。
こういった動的にWebページを作る方法の一つとして「サーブレット」があります。
サーブレットって具体的になに?
サーブレットとは受け取ったリクエストによって、返すレスポンスを変える仕組みそのものを指す言葉です。
Javaプログラムのソースコードで言うと、controllerクラスのメソッドを指します。
上記のように各メソッドが受け取ったリクエストによって、動的にレスポンス(JSP)を返します。
Spring-MVCでヴァリデーションチェックのやり方
pom.xmlにライブライ追加
下記のライブラリを追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<!-- validation --> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.0.0.GA</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>4.2.0.Final</version> </dependency> |
Controllerの設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
package com.dreamhanks.workmanager; /** * 管理者に対するコントローラクラス */ @RequestMapping(value = "/manager") @Controller public class ManagerController { /** * ログイン画面で入力されたパスワードの整合性を判定するメソッド(管理者用) * * @param loginFormForManager ログイン画面の入力値を保存するform(管理者用) * @param result 入力値のバリデーション結果 * @param model ControllerからViewに値を受け渡すためのパラメータ * @return ログイン画面のJSPファイル名 or 勤務時間検索画面のJSPファイル名 */ <span class=""> @</span>RequestMapping(value = "/loginProcess_manager") public String loginProcessForManager(@ModelAttribute @Valid LoginForm loginForm , BindingResult result) { // ヴァリデーションチェック不正がある場合 // result.hasErrors()の意味はエラーがある場合にtrueをreturnするメソッド if (result.hasErrors()) { return "login_manager"; } else { return "worktime"; } } } |
上記のようにメソッドの引数に定義することで、入力チェックの結果を受け取れます。
IF分でBindeingResultの変数に対して「.hasErrors()」関数を使って、結果のture/falseを取得できます。
この真偽の結果によって、ログイン画面に戻し、エラーメッセージを描画するか
この後の処理に行くかを決めます。
@ModelAttribute
@ModelAttributeを利用して、オブゼダートを生成します。
@Valid
@Validを利用して、検証作業ができる。
BindingResult オブゼダート
BindeingResultとはFormクラス内で入力チェックを行った結果を受け取るものです。
検証するVO作成
ヴァリデーションチェック自体は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クラス内で定義されているエンティティ一つ一つにアノテーションを使って
入力チェックする内容を設定できます。
アノテーションの種類については無数にあるので、その都度調べながら記述していきます。
上記のように、バリエーション違反した場合のメッセージの設定もできます。
JSPでエラーメッセージ表示
下記のタグを追加します。
1 2 |
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="f"%> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="f"%> <%@ page contentType="text/html; charset=UTF-8"%> <%@ page session="false" %> <html> <head> <title>login_manager</title> <link rel="stylesheet" href="${pageContext.request.contextPath}/resources/css/bootstrap.min.css"> </head> <body class="container"> <br> <h1> ログイン画面(管理者用) </h1> <f:form action="${pageContext.request.contextPath }/manager/loginProcess_manager" method="post" modelAttribute="loginForm"> <f:input type="password" path="password" class="form-control"/> <input type="submit" value="ログイン" class="btn btn-danger btn-lg"> <f:errors path="password" /> <span class="alert-success">${message}</span> </f:form> </body> </html> |
「@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の入力値と、・・・に
妥当性があるかどうかを制限するチェックです。
例)転記日付が登録日付より前の日付ではないこと
最後に
今回はサーブレットとは何か?・ヴァリデーションチェックのやり方について解説しました。
次回は入力されたユーザ情報であるpasswordがDBのユーザ情報と一致しているか?という
ビジネスロジックについて解説していきます
お読みいただきありがとうございました。
コメント