プロパティファイルによるメッセージ管理
実は、プロパティファイルで定義できるメッセージは、変換エラーのみに限ったことではありません。他のエラーメッセージや、通常のメッセージ、文字列をプロパティファイルで定義したものに置換することができます。プログラム中ではメッセージをキーで扱い、実際に表示するための文字列は外部ファイルに持つことができるわけです。
バリデーションのエラーメッセージ
前回のバリデーションのエラーメッセージを、プロパティファイルによる定義に変更するには、次のようにします。キーの名前は任意です。
<!-- 1.名前フィールドの必須入力チェック --> <field name="name"> <field-validator type="requiredstring"> <message key="errors.required.name"/> </field-validator> </field>
errors.required.name=名前を入力してください
バリデーションをアノテーションで記述した場合でも、ActionSupport
クラスで提供されているgetText
というメソッドを利用すれば、プロパティファイルからメッセージを取得できます。
@Validations( requiredStrings = { @RequiredStringValidator( fieldName="name", message="${getText('errors.required.name')}" ) } )
プログラムでプロパティファイルを扱う
また、getText
メソッドは、当然ながらアノテーションだけでなくプログラム中に記述できます。
public void validate() { if ( name == null || name.length() == 0 ) { addActionError( getText("errors.required.name") ); } }
JSPファイルでプロパティファイルを扱う
JSPでのカスタムタグでも、プロパティファイルを参照できるものがあります。この場合のプロパティファイルは、JSPファイルを呼び出すActionクラスが管理するものを指します。
<s:text name="some.key" />
上記は、キーを指定してプロパティファイルの値をそのまま表示するタグです。
<s:textfield key="some.key" name="textfieldName"/>
こちらは、テキスト入力のラベルにプロパティファイルの値を使用します。
以上のタグ以外でも、getText
メソッドを使えばラベル部分などにプロパティファイルの文字列が使えます。
<s:property value="getText('some.key')" />
国際化への対応
上記のプロパティファイル参照方法は国際化(i18n)にも対応しています。JSPと同様に、接続ユーザーのロケール情報を利用して自動的にロケールに対応したプロパティファイルを読み込むことができます。
Struts 2でも、プロパティファイルの命名規則は、「プロパティファイルのベース名_言語コード_国コード_地域コード.properties」となります。例えば前述のプロパティファイルで、英語であれば「ResearchWithValidation_en.properties」という名前にします。