3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Struts2とValidation(概要)

Last updated at Posted at 2015-04-23

前置き

技術的な話や実装サンプルはありません。

入力値検証(Validation)とは

入力値検証(Validation)とは、アプリケーション利用者が入力した入力値が妥当であるかを検証すること。

入力値検証を実現・補助する方法

Webアプリケーション・Webシステムで実現している方法

  • クライアント側
    • JavaScriptで静的チェック
    • ブラウザUIの標準を拡張したUIコンポーネント
      • オートコンプリート
      • プレースホルダー
      • 子画面やダイアログを使った検索→メイン画面に反映
      • HTML5のValidationやフォーマット指定
    • Ajaxを使ったValidation機構
    • JavaScriptフレームワーク各種
  • サーバ側
    • Validationフレームワーク
      • Commons-Validator
      • BeansValidation
      • OVal framework
      • Spring Validation
      • 型変換(TypeConvertion)
    • Javaコードを作成、手組のクラス

WebアプリケーションのValidation絶対条件

クライアント側で入力値検証をしたとしても、サーバ側でも入力値検証は必ず実施する。

Webシステムゆえ、HTTPリクエストで任意のURLやパラメータをサーバへ送信できてしまうため、不要なパラメータや不正な値をシステムに入れさせない。

Struts2の標準Validation

Struts2で使う標準のValidationを、ここではStruts2-Validationと呼ぶ。
Struts2では、クライアント上で動くValidationはAjaxを使った方法を取る。これをAjaxValidationと定義している。

  • AjaxValidationは、実際にサーバへ送信してValidationを実施する。
  • サーバ側でチェックした結果をJSONで返し、それを受け取るJavaScriptをStruts2が提供している。

Struts2-Validationの動作

次の図は、Struts2-Validationの標準動作の模式図である。

validation.png

  • 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に移行させるパターンも実現できる
3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?