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.17:【Struts2】カスタムタグの拡張応用 〜 共通部品化・UI拡張で保守性アップ 〜

Posted at

※ 本章は「データ一覧表示の最適化」シリーズとなります


■ はじめに:カスタムタグの応用が“実務の質”を変える

Struts2のカスタムタグは単なるテンプレート記述の省力化にとどまらず、
**「共通UI部品」**として設計することで、保守性・再利用性・チーム開発効率が大きく向上します。

本記事では、Struts2のタグライブラリ機能を活用した実務向け拡張パターンをご紹介します。


■ カスタムタグの構成復習(最低限ここだけ押さえる)

要素 役割
.tagファイル 実際に出力されるUI部品のテンプレート
TLDファイル カスタムタグの定義情報(属性・名前空間など)
TagSupport拡張クラス(必要に応じて) 高度な動的ロジックを扱う場合に使用

.tag のみでも多くの共通化は実現可能です


✅ パターン①:よく使う「ラベル+入力欄」UIの共通タグ化

📌 目的

  • 同じような入力UIが各画面に散在している
  • 必須マークや幅・エラー対応がバラバラ

✅ 例:labelInput.tag

<div class="form-group">
  <label for="${id}">
    ${label}<s:if test="required"> <span class="required">*</span></s:if>
  </label>
  <s:textfield name="${name}" id="${id}" cssClass="form-control"/>
</div>

✅ 使用例(JSP側)

<my:labelInput name="username" label="ユーザー名" required="true"/>

✅ パターン②:エラー付きフォーム部品の共通タグ化

📌 目的

  • 入力欄に対して個別に <s:fielderror> を毎回書くのが面倒

  • スタイリングやマークアップが統一されていない

✅ 例:errorInput.tag

<div class="form-group <s:if test="hasFieldErrors('${name}')">has-error</s:if>">
  <label for="${name}">${label}</label>
  <s:textfield name="${name}" id="${name}" cssClass="form-control"/>
  <s:fielderror fieldName="${name}" />
</div>

✅ パターン③:繰り返しUI部品(リストアイテムのタグ化)

📌 目的

  • <s:iterator> で表示するリスト内の構造が毎回複雑

  • 投稿一覧、コメント、通知など、見た目とロジックが類似している

✅ 例:postItem.tag

<div class="post">
  <div class="post-header">${post.userName} さん</div>
  <div class="post-body">${post.content}</div>
  <div class="post-footer">${post.timestamp}</div>
</div>

✅ 使用例(JSP側)

<s:iterator value="postList" var="post">
  <my:postItem post="%{#post}" />
</s:iterator>

💡 共通タグ設計のポイント&落とし穴

  • 🔹 属性数が多すぎると逆に使いにくくなる

  • 🔹 ロジックと表示の責務を分ける(カスタムタグはUI専用に)

  • 🔹 JSPで読みやすさ・書きやすさを両立する命名規則を持つ


📝 まとめ:業務効率に直結する「共通UI部品化」のすすめ

  • フォームや表示UIの「見た目」や「構造」をタグ化することで、
    保守性・再利用性・チーム開発効率が劇的に改善されます。

  • UIの仕様変更にも強く、プロジェクト全体の品質向上にもつながります。


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?