メッセージ定義プロパティファイルの作成
プロパティファイルは以下のような順番で探しに行きます。指定したキーに対応する最初に見つかったメッセージが使用されます。
- 同じパッケージ内にある「クラス名.properties」
- 親クラスと同じパッケージ内にある「クラス名.properties」(最終的にはjava/lang/Object.properties)
- 実装しているインターフェースと同じパッケージ内にある「クラス名.properties」(最終的にはjava/lang/package.properties)
- 同じパッケージ内にある「package.properties」
- 親クラスと同じパッケージ内にある「package.properties」
今回はValidateBySelfActionとValidateActionで同じメッセージを使うのでww2.examples.eventパッケージにpackage.propertiesファイルを置きました。
(全角文字を含む場合はnative2asciiでの変換が必要です)
name.required=名前を入力してください
メッセージの使用(Actionクラス内)
getText()メソッドでメッセージのキーを指定してメッセージを取得します。
public void validate() { if (StringUtils.isEmpty(name)) { addFieldError("name", getText("name.required")); } }
メッセージの使用(validation.xml内)
messageタグでキー属性にメッセージのキーを指定します。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd"> <validators> <field name="name"> <field-validator type="requiredstring"> <message key="name.required" /> </field-validator> </field> </validators>
メッセージの使用(Velocityファイル内)
$action.getText('メッセージのキー')
独り言
メッセージの外部化はcom.opensymphony.xwork.TextProviderを実装すればActionSupportのサブクラスでなくても出来るかもしれませんが、試してはいません。