0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

📘 Vol.11.2.3「戻り先制御と画面遷移の設計パターン」

Last updated at Posted at 2025-05-26

Struts2プロジェクトにおける画面遷移と戻り先制御の設計パターンについて解説します。


🎯 背景と目的

業務システムでは、

  • 登録処理の後に一覧画面へ戻す
  • 入力エラー時にフォーム画面へ戻す
  • キャンセル時に前画面へ戻す
    といった 「戻り先の制御」 が非常に重要です。

Struts2では、アクションの実行結果に応じて柔軟に画面遷移を制御できます。本記事ではその基本設計パターンを整理し、実際のプロジェクトでの実装例を紹介します。


✅ 戻り値による遷移制御

Struts2ではアクションクラスの実行結果(result)として以下のような戻り値を返すことができます。

戻り値 意味 主な用途
success 正常処理成功 一覧画面や完了画面に遷移
input 入力エラー 入力フォームに戻る
error 業務エラー エラー専用画面に遷移
cancel キャンセル操作 前画面や一覧に戻る

📁 struts.xml の定義例(抜粋)

<!-- ログイン処理 -->
<action name="login" class="com.company.bulletinboard.action.login.LoginAction">
  <result name="login">/login.jsp</result>
  <result name="admin">/view/ManagementMenu.jsp</result>
  <result name="user">/view/userPortal.jsp</result>
  <result name="input">/login.jsp</result>
</action>

<!-- キャンセル処理(戻り先: list画面) -->
<action name="cancel" class="com.company.bulletinboard.action.CancelAction" method="mainProc">
  <result name="cancel" type="redirect">list</result>
  <result name="success" type="redirect">list</result>
</action>

<!-- 登録処理の後に一覧画面へ -->
<action name="InsertUser" class="com.company.bulletinboard.action.admin.user.InsertUserAction">
  <result name="success" type="redirectAction">UserManagementScreen</result>
  <result name="input">/view/CreateUserScreen.jsp</result>
</action>

🧠 セッションに戻り先情報を保持する

登録や投稿処理の後、元の画面の状態を再構築する必要があるケースでは、セッションに戻り先の情報(例:ID)を保存するのが有効です。

実装例:スレッドIDをセッションに保存

// PostAction.java(一部抜粋)
session.put("thread_id", thread_id);  
// 投稿後、PostListAction へリダイレクトし、スレッド詳細を再取得

このようにセッションに必要な情報を保持しておくことで、投稿直後の一覧再表示や、前回の表示状態の再現が可能になります。


🏁 戻り専用アクションの設計例

戻り処理のみに責務を限定したアクションも推奨されるパターンです。

<action name="goToManagementMenu" class="com.company.bulletinboard.action.goToManagementMenuAction">
  <result name="success" type="redirect">/view/ManagementMenu.jsp</result>
</action>

処理を分離することで、可読性と保守性が向上します。


✅ 本プロジェクトでの実装成果

実際のプロジェクト(GitHub: juehara-crypto / Portfolio_Bulletinboard)において、以下のようにパターンが活用されています:

  • 戻り値による一覧遷移、フォーム復帰、エラー遷移

  • セッションによる戻り先(スレッドIDなど)の保持

  • 戻り専用アクションによる役割分離


📌 まとめ

「戻り先制御と画面遷移の設計パターン」は、業務アプリケーションのユーザー体験を支える基礎です。Struts2の機能を活用すれば、戻り処理・入力エラー処理・キャンセル処理を一貫した設計で実現できます。

今後、処理の分岐やエラーパターンが増える場面でも、このパターンを基盤にして柔軟に拡張できます。

🙌 最後に

Struts2を用いたWebアプリケーション開発で、戻り先設計に悩まれている方の参考になれば幸いです。

ご質問やご指摘があれば、お気軽にコメントください!


📎 GitHubリポジトリ:
juehara-crypto / Portfolio_Bulletinboard


✨ シリーズまとめ(Vol.11.2.xx アクション層設計)


🧭 関連記事(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.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.6 ActionSupport の便利メソッドと国際化対応 ユーティリティ / i18n
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連携) 外部公開

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?