JSP TagSupportクラスを継承してカスタムタグを作成する方法

環境
Java SE 1.8
Eclipse 4.14

構文

public class クラス名 extends TagSupport {

@Override
public int doEndTag() throws JspException{処理コード}
}

javax.servlet.jsp.tagext.TagSupportクラス
bodyなしのタグ、bodyに作用しないタグ、bodyを繰り返すタグ
javax.servlet.jsp.tagext.TagSupport
bodyの内容を変更するタグ
javax.servlet.jsp.texext.SimpleTagSupport
Servlet2.4以上でbodyなしのタグ

使用例

TagSupportクラスを継承し、bodyなしのタグを作成します
1.TagSupportクラスを継承する

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class CustomTag extends TagSupport {

    private String name;

    @Override
    public int doEndTag() throws JspException {
        try {
            // 出力
            pageContext.getOut().print("都市名:「" + name + "」");
        } catch (IOException ex) {
            Logger.getLogger(SampleTagHandler.class.getName()).log(Level.SEVERE, null, ex);
        }
        // 残りのページを評価する値を返す
        return EVAL_PAGE;
    }

    // name属性をセットする
    public void setName(String name) {
        this.name = name;
    }

}

2.タグ設定を生成する

  <!-- タグの定義 -->
  <tag>
    <!-- タグの名前 -->
    <name>CustomTag</name>
    <!-- タグハンドラクラス -->
    <tag-class>CustomTag</tag-class>
    <!-- bodyを持つかどうか -->
    <body-content>empty</body-content>
    <!-- 属性を複数並べる-->
    <attribute>
      <!-- 属性名 -->
      <name>name</name>
      <!-- 必須か -->
      <required>true</required>
      <!-- 評価かどうか -->
      <rtexprvalue>true</rtexprvalue>
      <!-- 属性の型 -->
      <type>java.lang.String</type>
    </attribute>
  </tag>
</taglib>

3.作成したタグを利用する

<!%-- TLDファイルの取り込み -->
<%@taglib prefix="cft" uri="/WEB-INF/tlds/cfttaglib" %>

<!%-- カスタムタグの利用 -->
<cft:CustomTag name="Tokyo" />

 

JSP

Posted by arkgame