0
0

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.8.18:【Struts2】JSP構造のテンプレート最適化と共通レイアウト〜 <s:include> / header.jspf / 共通テンプレート構成の実務設計 〜

Last updated at Posted at 2025-05-23

🔰 概要

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">
  &copy; 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())処理の基本と実務活用について解説します。
ユーザー登録/投稿処理など、入力値バリデーションの鉄板設計パターンにご興味ある方はお見逃しなく!


🔄 関連記事

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?