✅ 概要:ActionSupportとは?
Struts2のActionSupport
は、ほとんどのActionクラスで継承されることの多い、ユーティリティ集約型の基底クラスです。
以下の機能をまとめて提供することで、Actionクラス実装の簡素化と保守性向上を実現します。
- 入力チェックとメッセージ管理のサポート
- 国際化対応(i18n)
- デフォルトの共通処理との親和性(例:
validate()
)
🔧 1. ActionSupportの主な便利メソッド
🗨️ メッセージ追加
addActionMessage("登録が完了しました");
addActionError("エラーが発生しました");
addFieldError("email", "メールアドレスが不正です");
-
addActionMessage()
:成功系の通知メッセージ用 -
addActionError()
:汎用的なエラーメッセージ用 -
addFieldError()
:バリデーションフィールド単位のエラー追加
✅ フィードバック取得
List<String> messages = getActionMessages();
List<String> errors = getActionErrors();
Map<String, List<String>> fieldErrors = getFieldErrors();
🌐 2. 国際化(i18n)対応:getText() の活用
📘 基本の使い方
getText("message.key");
getText("welcome.user", new String[] {"山田さん"});
📁 リソースファイルの仕組み
Struts2では以下の優先順位でプロパティファイルからメッセージを解決します:
ActionClass_ja.properties
ActionClass.properties
global_ja.properties
global.properties
⚠️ デフォルトのリソース名は
struts.custom.i18n.resources
で上書き可
📁 ファイル例:UserAction_ja.properties
welcome.user = ようこそ、{0} さん!
💻 3. 実務での活用パターン(成功メッセージ+バリデーション)
🧪 validate() メソッドとの併用例
@Override
public void validate() {
if (email == null || email.isEmpty()) {
addFieldError("email", getText("error.email.required"));
}
}
✅ 成功時にメッセージ表示
addActionMessage(getText("success.register"));
return SUCCESS;
🔄 4. ActionSupportを継承する設計としない設計
方針 | メリット | 備考 |
---|---|---|
ActionSupport を継承 |
コードが簡潔に。便利メソッドをすぐ使える | 多くのプロジェクトでデフォルト |
継承せずにDIなどで注入 | 責務分離が明確。ユーティリティ依存を回避 | 大規模/堅牢性重視の設計で稀に |
✅ まとめ:ActionSupportを理解すれば、Action設計の質が一段階アップ!
-
ActionSupport
は「便利系の宝庫」 -
getText()
で多言語対応をスマートに実装 - バリデーション&メッセージ連携でUX向上
- i18n設計はグローバル化の第一歩!
🧩 次回予告:Vol.11.7 validate()
/ input
結合戦略とユーザー入力支援の高度化テクニック
🧭 関連記事(Vol.11.xxxシリーズ)
連番 | タイトル | 内容分類 |
---|---|---|
Vol.11.0 | Struts2が提供してくれる便利機能まとめ9選 | 導入&概要 |
Vol.11.1 | 自動注入とステートレスActionの仕組み | フレームワーク内部理解 |
Vol.11.2 | UX改善に効く!アクション層設計と入力制御の極意(プロローグ) | UX設計・アクション層総論 |
Vol.11.2.1 | 【実践編】Struts2アクション層の役割と設計パターン(Command型 / UIアクション分離など) | アクション設計パターン |
Vol.11.2.2 | 【UX重視】戻るボタン・キャンセル処理の設計手法と「戻り先管理」のスマート実装 | 戻り先制御とUX設計 |
Vol.11.2.3 | 【設計ノウハウ】多画面遷移時のパラメータ受け渡し・保持戦略(セッション vs hidden vs URL) | パラメータ多重管理 |
Vol.11.2.4 | 【実践ガイド】ユーザー操作を考慮したアクション遷移設計(リダイレクト vs フォワードの使い分け) | UX遷移設計/Result制御 |
Vol.11.2.5 | 【トラブル防止】アクション層の共通処理とメンテナブルなBaseAction設計 | アクション共通化/保守性 |
Vol.11.3 | Struts2の defaultStack とは?Interceptorの中身を詳しく追ってみる | Interceptor |
Vol.11.3.2 | 🔧 Vol.11.3.2 独自Interceptorの作り方と使い所 Struts2のカスタマイズを“実践で使えるレベル”に一歩進めよう | Interceptor |
Vol.11.4 | 入門者のための「パラメータ自動バインディング」完全理解ガイド | 自動バインディング |
Vol.Vol.11.4.1 | 入門者のための自動バインディング実践パターン集 | 自動バインディング |
Vol.11.5 | Struts2の構成理解が“実務レベル”へと進化する決定版 | 設定ファイル構造 |
Vol.11.5.1 | Struts2の“画面遷移の全体像”を理解するためのマイルストーン記事 | 設定ファイル構造 |
Vol.11.7 | validate() / input 戦略とUX設計 | 開発スタイルの違い |
Vol.11.8 | アノテーションベースの設定 vs XML定義の比較 | 開発スタイルの違い |
Vol.11.9 | バリデーション完全解説(XML / アノテーション) | バリデーション(※Vol.8補完) |
Vol.11.10 | Struts2の「OGNL」ってなに?しくみと使い方をやさしく解説 | 式言語OGNL解説 |
Vol.11.11 | ModelDriven インターフェースの使いどころと注意点 | Model駆動開発 |
Vol.11.12 | SessionAware と RequestAware でセッション/リクエスト管理 | セッション管理 |
Vol.11.13 | Resultタイプ完全解説(dispatcher / redirect / stream など) | 遷移パターン理解 |
Vol.11.14 | Vol.11.14 ValueStackの中身を理解する – 画面とActionの橋渡し役 | Action |
Vol.11.15 | Interceptorチェーンを自作してみよう(ログ / 認証フィルタ) | Interceptor |
Vol.11.16 | エラー処理と例外ハンドリングの実践パターン | ハンドリング設計 |
Vol.11.17 | Struts2でファイルアップロード機能を実装する方法 | 実装系Tips |
Vol.11.18 | 非同期通信(AJAX)とStruts2の連携方法 | フロント連携編 |
Vol.11.19 | セキュリティ対策(CSRF, XSS, パラメータ偽装) | セキュリティ対策 |
Vol.11.20 | 複数フォームを安全に扱う!セッション管理と動的フォームの考え方 | セッション管理 |
Vol.11.21 | Struts2でJSONを返す!REST API連携と非同期通信の基本設計 | セッション管理 |
Vol.11.22 | 本番環境構成とセキュリティ設計(Apache+Tomcat+Struts2連携) | 外部公開 |