🔰 概要
Struts2アプリでよくある悩み:
-
画面ごとに共通レイアウトをコピペしていて保守がつらい
-
ヘッダー/フッターに変更があると全JSP修正が必要
-
そもそも共通テンプレートってどう作るのがベスト?
👉 本記事では、Struts2 × JSPにおけるテンプレート設計のベストプラクティスとして、以下を徹底解説します:
-
共通パーツの分離(header.jspf / footer.jspf)
-
タグによる動的読み込み
-
共通テンプレートの構造化と設計ルール化
-
動的メニューやログインユーザー表示などの応用例
📌 1. なぜテンプレート構造が必要なのか?
❌ よくあるアンチパターン
<!-- 画面ごとに同じHTMLヘッダーやナビをベタ書き -->
<html>
<head>〜</head>
<body>
<div class="header">共通ナビ</div>
<div class="main">…</div>
<div class="footer">©2024</div>
</body>
</html>
✅ テンプレート最適化のメリット
-
共通部の保守性向上:header/footerだけ修正すれば全画面に反映
-
画面追加が高速化:ベース構造が使い回せる
-
ログインユーザー名表示などの一元化が可能
🛠 2. 基本パターン:JSP共通パーツ化(.jspf)
✅ header.jspf / footer.jspf の分割例
<!-- /view/include/header.jspf -->
<div class="header">
<h1>掲示板アプリ</h1>
ようこそ、<s:property value="#session.user_name"/> さん!
</div>
<!-- /view/include/footer.jspf -->
<div class="footer">
© 2024 企業名 All rights reserved.
</div>
📄 メインJSPでの利用例(例:userPortal.jsp)
<%@ include file="/view/include/header.jspf" %>
<div class="main">
<!-- 各画面の個別UI -->
</div>
<%@ include file="/view/include/footer.jspf" %>
🔄 3. タグの活用
より動的に切り替えるテンプレートや、Action経由の読み込み制御に使えます。
<s:include value="/view/include/header.jspf" />
🧩 利用シーン:
-
ログイン状態/権限によるナビ切り替え
-
管理者用と一般ユーザー用でテンプレートを出し分け
🧱 4. 実務設計:共通テンプレート構造のおすすめ構成
/view/
├─ include/
│ ├─ header.jspf
│ ├─ footer.jspf
│ └─ menu.jspf
├─ layout/
│ └─ baseLayout.jsp (共通テンプレート)
├─ UserManagementScreen.jsp
├─ BulletinboardManagementScreen.jsp
└─ …
🔁 baseLayout.jsp
を「全画面の土台」とし、そこから<s:include>
で各コンテンツJSPを呼び出す構造がベストプラクティスです。
✨ 5. 応用:共通レイアウト内にログイン情報・ナビゲーションを配置
-
#session.user_id や #session.user_name で動的表示
-
権限によって でメニューを切り替え
<s:if test="#session.user_role == 'admin'">
<a href="adminMenu.action">管理メニュー</a>
</s:if>
✅ まとめ:Vol.8.18のポイント
ポイント | 内容 |
---|---|
🔧 共通JSPパーツ |
header.jspf / footer.jspf / menu.jspf に分離 |
📦 テンプレート設計 |
baseLayout.jsp を作り全画面に共通適用 |
🔄 柔軟な出し分け |
<s:include> +#session で動的に |
💡 実務適用例 | ログイン表示・メニュー切替・画面全体の統一感 |
🔜 次回予告
次回 Vol.9.1 では、Struts2における入力チェック(validate())処理の基本と実務活用について解説します。
ユーザー登録/投稿処理など、入力値バリデーションの鉄板設計パターンにご興味ある方はお見逃しなく!