|
||
|
前回の基礎編に引き続き,SpringMVCでの入力チェックについて解説します。前回は,入力チェックのロジックを手作りする方法を紹介しました。この方法でも入力チェックはできますが,筆者としては,これから紹介するSpring Modules*1のCommons Validatorと連携する方法をお薦めします。
*1正確には,Spring Modulesに含まれる拡張モジュール「spring-modules-validation」
Commons Validatorをお薦めする理由は以下の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 | - | クレジットカード・フォーマットチェック |
- | 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と連携した入力チェックの流れ |
それでは早速,サンプル・アプリケーションを作成していきましょう。
環境構築
まず,アプリケーション作成に必要なライブラリを入手してください。今回必要となるライブラリは,Spring Framework,JSTL,Spring Modules,Commons ValidatorおよびCommons Validatorに依存するライブラリです。以下のサイトよりダウンロードしてください。
- Spring Framework 2.0.7
- Spring Modules 0.8
- Commons Validator 1.3.1
- Commons Digester 1.8
- Commons BeanUtils 1.6
- Commons Lang 2.3
- Commons Collections 3.2
- Jakarta Oro 2.0.8
- Antlr 2.7.5
- Jakarta Standard Taglibs 1.1.2
解凍(展開)してできた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に移動しています。