前置き
技術的な話や実装サンプルはありません。
入力値検証(Validation)とは
入力値検証(Validation)とは、アプリケーション利用者が入力した入力値が妥当であるかを検証すること。
入力値検証を実現・補助する方法
Webアプリケーション・Webシステムで実現している方法
- クライアント側
- JavaScriptで静的チェック
- ブラウザUIの標準を拡張したUIコンポーネント
- オートコンプリート
- プレースホルダー
- 子画面やダイアログを使った検索→メイン画面に反映
- HTML5のValidationやフォーマット指定
- Ajaxを使ったValidation機構
- JavaScriptフレームワーク各種
- サーバ側
- Validationフレームワーク
- Commons-Validator
- BeansValidation
- OVal framework
- Spring Validation
- 型変換(TypeConvertion)
- Javaコードを作成、手組のクラス
- Validationフレームワーク
WebアプリケーションのValidation絶対条件
クライアント側で入力値検証をしたとしても、サーバ側でも入力値検証は必ず実施する。
Webシステムゆえ、HTTPリクエストで任意のURLやパラメータをサーバへ送信できてしまうため、不要なパラメータや不正な値をシステムに入れさせない。
Struts2の標準Validation
Struts2で使う標準のValidationを、ここではStruts2-Validationと呼ぶ。
Struts2では、クライアント上で動くValidationはAjaxを使った方法を取る。これをAjaxValidationと定義している。
- AjaxValidationは、実際にサーバへ送信してValidationを実施する。
- サーバ側でチェックした結果をJSONで返し、それを受け取るJavaScriptをStruts2が提供している。
Struts2-Validationの動作
次の図は、Struts2-Validationの標準動作の模式図である。
- Action実行前の処理
- Validationエラーを検出→Actionの実装部分は無視する
- Validationエラー画面へ自動遷移
Validationエラーの扱い
- Validationエラーは、全てActionクラスがもつFieldErrorsに格納
- 項目名ごとに管理
- 1つの項目に複数のエラーを格納できる
- 自動型変換もValidationエラーの1つとして扱われる
ActionクラスとValidationの関係
- Actionクラスがもつ1つ以上の項目を指定できる。
- Ationクラスの全体に実施可能
Struts2-Validationができるチェック内容
たくさん提供されているが、似ている機能をグルーピングすると、以下のようになる
- 必須項目
- 文字列長
- 数値の範囲
- 正規表現
- 自動型変換(指定しなくても自動的にチェックする)
- カスタマイズ
カスタマイズ(CustomValidator)で込み入った条件の検証もできる。
カスタムValidationの例
カスタムValidationの実装例
- 相関チェック
- 2値の大小比較
- 日付の前後比較
- マスター存在チェック
* データベースなどデータストアとの問い合わせも可能 - 楽観排他チェック
LumiでのCustomValidation
私が公開している Struts2のフルスタックプロジェクト:Lumi でのValidation拡張
Validation内部で任意のServiceクラスを実行できる
- DataAccessObjectも利用できるため、データベースを利用したチェックも特に気にせず実現できる
- 簡易な業務ロジック(ドメインチェック)をValidationに移行させるパターンも実現できる