次に、エラー発生時に使用するプロパティファイルを用意します。前述したように、StrutsのValidatorプラグインではエラーメッセージをプロパティファイル(「.properties」)上で管理しています。プロパティファイルは、「キー名=値」の形式で構成される単純なテキストファイルで、以下のような内容からなります。
ApplicationResources.properties.sjis |
errors.required ={0}はかならず入力してください。 |
注意:ファイル名の拡張子を「.sjis」としているのは、後述するように、このファイルを後から変換するためです。アプリケーション上に配置するのは、エスケープ変換した後のファイルなので、エスケープの前後でファイル名が重複しないよう、ここでは仮に「.sjis」という拡張子を付加しています。もちろん、これは一時ファイル的な処理なので、拡張子は自由に決めて構いません。
Validatorプラグインでは、エラーメッセージのキー名は事前に決められているということに注意してください。このエラーメッセージのキー名については、Validatorプラグインが標準で提供する検証の種類を説明する、次項の「validation.xmlを定義する」で併せて紹介しますので、ここではプロパティファイルの概要をよくつかんでおいてください。
プロパティ値に含まれる{0}、{1}のような文字列は、後から動的に渡されるパラメータのプレイスホルダ(置き場所)です。例えば、「{0}はかならず入力してください。」という文字列に、「タイトル」という文字列がパラメータとして与えられると、最終的に「タイトルはかならず入力してください。」というエラーメッセージが生成されるというわけです。このパラメータの指定方法についても、次項の「validation.xmlを定義する」であらためて紹介します。なお、プレイスホルダは、{0}から{3}まで最大4個を指定できます。
プロパティファイルに日本語が含まれている場合は、必ず「Unicodeエスケープ」と呼ばれる処理を行う必要があります。この処理を適切に行っていないと、Strutsアプリケーション上では、日本語(2bytes文字)部分が文字化けを起こしてしまいます。Unicodeエスケープは、コマンドプロンプトからnative2asciiコマンドを使用することで行うことができます。使用法は、以下のとおり、native2asciiコマンドのすぐ後ろに変換元のファイル名、その次に変換後のファイル名を指定します。
native2asciiコマンドによるUnicodeエスケープ処理 |
> native2ascii ApplicationResources.properties.sjis
ApplicationResources.properties |
Unicodeエスケープを実行すると、ファイルの中身は以下のようになります。
ApplicationResources.properties |
errors.required ={0}\u306f\u304b\u306a\u3089\u305a\u5165\u529b\u3057 |
アプリケーション上には、変換前のプロパティファイル「ApplicationResources.properties.sjis」ではなく、変換後のプロパティファイル「ApplicationResources.properties」を配置するようにしてください(変換が終わったら、ApplicationResources.properties.sjisは必要ありません)。
Validatorプラグインは、個々のフォーム要素に対して適用する検証の種類、検証時に必要なパラメータ、エラーメッセージなどのマッピングを、すべてvalidation.xml上で定義します。
validation.xml |
<?xml version="1.0" encoding="Shift_JIS" ?> |
前述のvalidation.xmlにおいて、スケルトン(骨格)となるのは以下の部分です。
validation.xml(一部) |
<?xml version="1.0" encoding="Shift_JIS" ?> |
検証内容の定義は、formset要素配下に、アクションフォームBeansの単位ごとに記述します。今回のサンプルでは、まだ扱っているアクションフォームBeansが1つしかないため、form要素も1つだけですが、ページの追加に伴ってアクションフォームBeansも増えていくはずです。その場合は、formset要素のform子要素を追加していきます。なお、form要素のname属性は、struts-config.xmlのform-bean要素で指定された論理名を指定します(アクションフォームBeansのクラス名ではないので注意してください)。
それでは、個々の検証設定について説明していきます。form要素直下のfield要素が、フォーム内の個々のフィールドに対する検証設定を表します。例えば、以下の部分に注目してみましょう。
validation.xml(一部) |
<field property="title" depends="required,maxlength"> |
この例では、属性値titleに対して、必須チェック(required)と文字列長チェック(maxlength)を行います。depends属性には、あらかじめvalidator-rules.xmlで用意された検証名をカンマ区切りで指定します。Validatorプラグインで利用可能な検証の種類は、以下のとおりです。また、前述したように、それぞれの検証名に対応するエラーメッセージのキー名も決まっている点に注目してください。
depends属性値 | チェックの種類 | キー名 | エラーメッセージ(例) | |
---|---|---|---|---|
required | 必須チェック | errors.required | {0}はかならず入力してください | |
minlength | 最小長チェック | errors.minlength | {0}は{1}文字以上で入力してください | |
maxlength | 最大長チェック | errors.maxlength | {0}は{1}文字以内で入力してください | |
mask | 正規表現チェック | errors.invalid | {0}は正しい形式で入力してください | |
byte | Byte型チェック | errors.byte | {0}はbyte型で入力してください | |
short | Short型チェック | errors.short | {0}はshort型で入力してください | |
integer | Integer型チェック | errors.integer | {0}はint型で入力してください | |
long | Long型チェック | errors.long | {0}はLong型で入力してください | |
float | Float型チェック | errors.float | {0}はFloat型で入力してください | |
double | Double型チェック | errors.double | {0}はDouble型で入力してください | |
date | 日付型チェック | errors.date | {0}は日付型で入力してください | |
range | 範囲チェック | errors.range | {0}は{1}以上{2}以下の範囲で入力してください | |
intRange | 範囲チェック(整数) | errors.range | {0}は{1}以上{2}以下の範囲で入力してください | |
floatRange | 範囲チェック(小数) | errors.range | {0}は{1}以上{2}以下の範囲で入力してください | |
E-Mailフォーマットチェック | errors.email | {0}は正しい形式で入力してください | ||
あらかじめ用意されたプレイスホルダ付きのエラーメッセージに対して、個々にパラメータを設定するのがargN要素の役割です。プレイスホルダに合わせてarg0からarg3要素まで使用できます。
name属性には、そのパラメータがどのエラーメッセージに対して適用されるかを検証名で指定します(省略時にはすべてのメッセージに対して適用)。例えば、name属性に“maxlength”と指定した場合には、検証名maxlengthに対応するエラーメッセージ“errors.maxlength”に対してパラメータが引き渡されます。
key属性には、「パラメータ値そのもの」、もしくはパラメータ値として引用するための「プロパティファイルのキー名」を指定します。ただし、プロパティファイルを引用する場合には、resource属性値を“true”に設定しておく必要があります(“false”に設定した場合には、指定値は固定値と見なされます)。また、${var:XXXXX}のように記述すると、次に説明するvar要素で指定した変数値を引用することもできます。それぞれの場合についての簡単な例を以下に示します。
コード | セットされる内容 | |
---|---|---|
<arg1 name="maxlength" key="100" resource="false" /> | 指定値“100”をそのままセット | |
<arg1 name="maxlength" key="${var:maxlength}" resource="false" /> | var要素で定義された変数maxlengthの値をセット | |
<arg1 name="maxlength" key="maxlength.max" resource="true" /> | プロパティファイルからmaxlength.maxの値をセット | |
最後はvar要素です。var要素は、検証時に必要なパラメータ情報を定義します。検証時に必要なパラメータとは、例えば、文字列長チェック時の最大文字数などです。var要素に、var-name要素(パラメータ名)とvar-value要素(パラメータ値)のセットで記述することができます。以下の表に、検証単位ごとに必要なパラメータをまとめておきます。なお、ここで明記されていない検証名には、特別なパラメータは必要ありません。
depends属性 | 必要なパラメータ | |
---|---|---|
minlength | minLength | |
maxlength | maxLength | |
mask | mask | |
range | max,min | |
intRange | max,min | |
floatRange | max,min | |
date | datePattern(datePatternStrict) | |
今回は、まずValidatorプラグインを利用するための環境設定、準備について紹介しました。次回は、これを基に書籍登録・更新アプリケーションに検証機能を組み込んでいきます。どうぞお楽しみに。
Copyright © ITmedia, Inc. All Rights Reserved.