12. メッセージの外部化

メッセージ定義プロパティファイルの作成

プロパティファイルは以下のような順番で探しに行きます。指定したキーに対応する最初に見つかったメッセージが使用されます。

  • 同じパッケージ内にある「クラス名.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のサブクラスでなくても出来るかもしれませんが、試してはいません。