💡 はじめに
Struts2のバリデーション処理では、エラーメッセージの表示方法を工夫することで「保守性」「再利用性」「多言語対応」の向上が図れます。
本記事では、ActionMessages.properties
などのメッセージリソースファイルを使って、バリデーションエラーメッセージを外部化・i18n対応する方法を解説します!
🏗 バリデーション × プロパティファイル の基本構成
Struts2では以下のように、プロパティファイルにエラーメッセージを記述して、Java側またはXML側から呼び出します。
📁 ファイル構成例
src/
└── main/
└── resources/
└── com/company/bulletinboard/action/login/LoginAction.properties
📝 LoginAction.properties
errors.required.username = ユーザー名は必須入力です。
errors.invalid.username = ユーザー名の形式が不正です。
🧩 Java側:validate()での使用
@Override
public void validate() {
if (username == null || username.isEmpty()) {
addFieldError("username", getText("errors.required.username"));
}
}
✅ getText() とは?
-
Struts2が提供する国際化対応のメソッド
-
メッセージプロパティファイルからキーに対応する文言を取得します
-
言語ファイルの切り替えも可能(例:LoginAction_en.properties)
🧩 XML側:バリデーション定義での使用
<field name="username">
<field-validator type="requiredstring">
<message key="errors.required.username"/>
</field-validator>
</field>
-
message
タグのkey
属性でメッセージリソースを参照 -
Java側と同様に外部化・i18nが可能!
🌍 多言語対応(i18n)の設定例
# LoginAction.properties(デフォルト=日本語)
errors.required.username = ユーザー名は必須入力です。
# LoginAction_en.properties(英語)
errors.required.username = Username is required.
Struts2は、リクエストヘッダーの Accept-Language
を見て自動的にファイルを切り替えます。
📝 Tips:BaseActionなど共通クラスでも getText() は使用可能!
共通処理クラス(例:BaseAction)で getText()
を使えば、エラー共通処理やログ出力にも柔軟にメッセージを適用できます!
logger.warn(getText("errors.session.timeout"));
✅ まとめ
項目 | 内容 |
---|---|
🔑 メリット① | エラーメッセージを一元管理でき、保守性が高まる |
🌐 メリット② | 多言語対応(i18n)に自然と対応可能 |
🔁 メリット③ | 同じキーを複数のActionで再利用できる |
🧭 次回予告:Vol.9.7
次回は、バリデーションエラー時のフィールド保持・初期値再表示の工夫について紹介予定です!
✨ シリーズまとめ(Vol.9.x バリデーション編)
-
🆕 Vol.9.6:(←今回)
🔎 Vol.9系で扱うトピック
回 | テーマ | 内容の一部紹介 |
---|---|---|
9.1 |
validate() メソッドの基本 |
Struts2標準の入力チェック基礎 |
9.2 |
@Validations アノテーション活用 |
宣言的バリデーション設計 |
9.3 |
validation.xml 外部定義でのバリデーション |
大規模PJでのメンテナンス性 |
9.4 |
conversion.properties と型変換 |
日付/数値/Enum変換の実務対応 |
9.5 | 入力エラー時のメッセージ制御 |
addFieldError() / メッセージキー運用 |
9.6 | バリデーション共通化 | 共通部品によるDRY設計 |
9.7 | サーバサイドとクライアントサイドの協調 | jQueryやHTML5との併用戦略 |
9.8 | 実務シナリオでのバリデーション総仕上げ | 会員登録/投稿処理などの実例適用 |
9.9 | バリデーション処理の単体テスト編 | validate()/独自バリデータ/input遷移の検証を網羅的に |
9.10 | エラー表示のUIデザイン編 | 視認性・操作性を高める実践テクニック |
9.11 | Ajax×バリデーション連携編 | クライアント×サーバーで UX&保守性を両立するハイブリッド構成 |