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.10:独自タグの自作入門 〜 JSP カスタムタグライブラリの基礎 〜

Last updated at Posted at 2025-05-22

🔗 本章は「Vol.8.9〜:Struts2 タグライブラリ応用編(実務/初級応用)」シリーズです。


Struts2の <s:*> タグに慣れてきたら、次のステップとして「独自のカスタムタグ(JSPタグライブラリ)」の作成を覚えましょう!

本記事では以下の構成で解説します:

  • ✅ TLDファイル(タグ定義XML)の作り方
  • ✅ カスタムタグクラス(Java)の作成方法
  • ✅ JSPからの使い方
  • ✅ よく使う実務パターンの紹介

✅ 想定読者

  • Struts2のUIタグにはある程度慣れてきた
  • JSPファイルに記述が散らかってきたので整理したい
  • 再利用可能なUIパーツを部品化したい

✅ 本記事で学べること

項目 内容
TLDファイルの構造 タグライブラリ定義の基本
タグクラスの作成 TagSupport を継承したタグ実装
JSPでの使い方 <%@ taglib ... %> による呼び出し
実務活用 UI共通化・メッセージ表示・再利用部品の実装

🛠 Step 1:TLDファイルの作成

/WEB-INF/custom.tld に以下の内容で定義します。

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
            http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
        version="2.1">
  <tlib-version>1.0</tlib-version>
  <short-name>custom</short-name>
  <uri>http://example.com/custom</uri>

  <tag>
    <name>messageBox</name>
    <tag-class>com.example.tags.MessageBoxTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
      <name>type</name>
      <required>false</required>
    </attribute>
    <attribute>
      <name>message</name>
      <required>true</required>
    </attribute>
  </tag>
</taglib>

🛠 Step 2:Javaのタグクラスを作成

package com.example.tags;

import javax.servlet.jsp.tagext.TagSupport;
import javax.servlet.jsp.JspWriter;

public class MessageBoxTag extends TagSupport {
    private String type;
    private String message;

    public void setType(String type) {
        this.type = type;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    @Override
    public int doStartTag() {
        try {
            JspWriter out = pageContext.getOut();
            String cssClass = "info".equals(type) ? "box-info" : "box-default";
            out.write("<div class='" + cssClass + "'>" + message + "</div>");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return SKIP_BODY;
    }
}

🛠 Step 3:JSPから呼び出す

<%@ taglib prefix="c" uri="http://example.com/custom" %>

<html>
  <body>
    <c:messageBox type="info" message="保存が完了しました。" />
  </body>
</html>

💡 実務での応用例

カスタムタグ名 用途例
<c:messageBox> エラーメッセージや通知の共通化
<c:formGroup> Bootstrap対応フォーム入力部品化
<c:submitButton> アイコン付きボタンの共通利用

📝 補足:TagSupportを使う理由

JavaEEの TagSupport を使うことで、JSPレベルで再利用可能な部品をJavaで表現できます。
Spring Bootでは「Thymeleaf + フラグメント」などの手段が主流ですが、古典的なJSP構成のStruts2プロジェクトでは今も有効です。


🔖 次回予告

📗 Vol.8.11:タグの出力をスタイリッシュに!UI統一Tips
→ Struts2タグ(例:<s:form><s:fielderror>)の出力HTMLを読み解き、
BootstrapやCSSフレームワークと連携させる方法を紹介します!


🧭 Vol.8 応用編シリーズ(進捗一覧)

Vol 内容 公開状況
8.10 カスタムタグ入門 ✅ 本記事
8.11 UI出力のカスタマイズ 🔜 執筆予定
8.12 共通レイアウト構成 🔜 執筆予定

🙏 最後に

Struts2でのUI開発を効率化するには、タグの理解と部品化が鍵になります。
本記事が皆さんの現場開発の一助になれば幸いです!

🌟 「いいね」や「ストック」で応援いただけると励みになります!

yaml
コピーする
編集する


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?