石橋 稔章(いしばし としあき)
株式会社DTSネットワーク事業本部所属。金融機関向けのStruts/Springベースのフレームワークを利用したWebアプリケーション自動生成ツールの開発・保守,プロジェクト支援に携わる。
青木 正平(あおき しょうへい)
株式会社DTS ネットワーク事業本部所属。Struts/Springベースのフレームワーク開発,プロジェクト支援に携わる。

 前回の基礎編に引き続き,SpringMVCでの入力チェックについて解説します。前回は,入力チェックのロジックを手作りする方法を紹介しました。この方法でも入力チェックはできますが,筆者としては,これから紹介するSpring Modules*1のCommons Validatorと連携する方法をお薦めします。

*1正確には,Spring Modulesに含まれる拡張モジュール「spring-modules-validation」

 Commons Validatorをお薦めする理由は以下の3点です。

  1. 必須チェックや桁数チェックのような,よく使われるチェックロジックを備えている
  2. 入力チェックの実装が容易
  3. クライアント(Webブラウザ側)で入力チェックすることも可能

 3番目について補足すると,Commons Validatorでは,クライアントでの入力チェック機能も提供しています。サーバー側で入力チェックするだけでも問題はありませんが,サーバーに送信する前に,クライアント側であらかじめ入力チェックができれば通信量を削減できます。Commons Validatorを利用すると,簡単な設定だけで,サーバーとクライアントで同じチェックを行うことができます。

 Commons Validatorを知らない方のために簡単に説明しましょう。Commons Validatorは,もともとStrutsの一機能(入力チェック部分)として開発が行われていた入力チェック・フレームワークです。その後,入力チェックの部分がStrutsから抜き出されて,Struts以外のフレームワークでも使用できるようになっています。

 使い方は,「どの項目に,どのような入力チェック・ルールをかけるか」をXMLの設定ファイルに列挙します。デフォルトで表1のルールが提供されており,基本編で行ったような入力チェックのロジックを開発者が作らなくても実現することが可能です。表1の入力チェック・ルールはSpring Modules 0.8で利用できるものです。

表1●入力チェック・ルール
チェック
ルール
var値 説明
required - 必須チェック
requiredif - 条件に合致した場合の必須チェック
field[n] 対象とするプロパティを指定
存在する場合に必須チェック
fieldTest[n] 対象とするプロパティの条件を指定
null,null以外,指定する値と同値の場合に必須チェック
それぞれNULL,NOTNULL,EQUALで指定
fieldValue[n] 対象とするプロパティの値を指定
入力された値が対象プロパティと同値の場合に必須チェック
fieldIndexed[n] 対象とするプロパティがリストや配列であるかを指定
indexedListPropertyを利用
fieldJoin 複数条件の連結条件を指定
AND,ORで指定
mask - 正規表現チェック。var値にmaskの指定が必須
mask 正規表現を指定
byte - バイト型チェック
short - short型チェック
integer - int型チェック
long - long型チェック
float - float型チェック
double - double型チェック
date - 日付フォーマット・チェック。var値にdatePatternかdatePatternStrictの指定が必須
datePattern 日付フォーマットを指定。yyyy/MM/ddなど
datePatternStrict 日付フォーマットを指定(datePatternとの違いは「yyyy/MM/dd」を指定した場合に,datePatternでは「2004/1/1」をエラーにしないが,datePatternStrictでは「2004/01/01」でないとエラーになる)
intRange - int型の範囲内の値であるかをチェック。var値にminおよびmaxの指定が必要
min 最小値を指定
max 最大値を指定
doubleRange - double型の範囲内の値であるかをチェック。var値にminおよびmaxの指定が必要
min 最小値を指定
max 最大値を指定
floatRange - float型の範囲内の値であるかをチェック。var値にminおよびmaxの指定が必要
min 最小値を指定
max 最大値を指定
creditCard - クレジットカード・フォーマットチェック
email - E-mailアドレス・フォーマットチェック
minlength - 最小桁数チェック。var値が必須
minlength 桁数を指定。入力した文字数が指定した値以下の場合エラー
maxlength - 最大桁数チェック。var値が必須
maxlength 桁数を指定。入力した文字数が指定した値以上の場合エラー
validwhen - 指定した条件にマッチするかをチェック。var値が必須。相関チェックなどに利用
test 条件を指定

 設定ファイルの書き方は,Strutsで利用する場合と同様に記述できるので,Commons Validatorを利用したことがある人にとっては,学習コストを低く抑えることができます。

サーバーでの入力チェック

 Commons Validatorと連携した際の入力チェックの流れは,図1のようになります。処理の流れ自体は基本編と同様ですが,入力チェッククラスはCommonsValidator連携モジュールが提供するクラスを使用します。

 入力画面で送信ボタンを押すと,メッセージがサーバーに送信されます。送信されたメッセージは,サーブレットに渡され,リクエストURLに対応するコントローラを呼び出し,入力クラスにメッセージが設定されます(矢印(1)の流れ)。

 リクエストURLに対応するコントローラに入力チェックの設定がある場合,入力チェック設定ファイルと入力チェック・ルール・ファイルを呼び出します(矢印(2)の流れ)。入力チェック設定ファイルには「どの項目にどのような入力チェックを行うか」が記述されています。入力チェック・ルール・ファイルには「入力チェックを行う具体的なクラスおよびメソッド」が記述されています。

 設定ファイルの情報をもとに,Commons Validatorで提供するクラスでチェックが行われます。入力チェック処理に問題がなければ,コントローラはビジネス・ロジックを呼び出します(矢印(3))。

図1●Commons Validatorと連携した入力チェックの流れ
図1●Commons Validatorと連携した入力チェックの流れ

 それでは早速,サンプル・アプリケーションを作成していきましょう。

環境構築

 まず,アプリケーション作成に必要なライブラリを入手してください。今回必要となるライブラリは,Spring Framework,JSTL,Spring Modules,Commons ValidatorおよびCommons Validatorに依存するライブラリです。以下のサイトよりダウンロードしてください。

 解凍(展開)してできたjarファイルを,(プロジェクトルート)/WebContent/WEB-INF/libにコピーしてください。なお,Eclipseでのプロジェクト作成は,「第4回 SpringMVCの基本を知る」を参照してください。以上で環境構築は完了です。

 本稿では,Spring Frameworkのバージョン2.0.7を利用しています。最新版の2.5を利用したい方は,spring.jarのほかにspring-webmvc.jarを追加してください。2.5からSpringMVC関連のクラスがspring-webmvc.jarに移動しています。