「Java」doEndTag()メソッドでTagSupportを実装してカスタムタグを作成するサンプル
説明
1.JspWriter
JSP ページのアクションとテンプレートデータは、PageContext オブジェクトのメソッドを使用して自動的に初期化される暗黙変数out によって参照される JspWriter オブジェクトを使用して書き込まれます。
2.TagSupport
TagSupport クラスは、新しいタグハンドラーの基本クラスとして使用することを目的としたユーティリティクラスです。
操作例
1.インターフェースTagSupportを実装してカスタムタグを定義する
package com.arkgame.study;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
public class CustomTag extends TagSupport {
private static final long serialVersionUID = 1L;
private String value;
@Override
public int doEndTag() throws JspException {
try {
JspWriter jw = pageContext.getOut();
jw.print("test: " + value);
} catch (IOException e) {
throw new JspException(e.getMessage());
}
return EVAL_PAGE;
}
}
package com.arkgame.study;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
public class CustomTag extends TagSupport {
private static final long serialVersionUID = 1L;
private String value;
@Override
public int doEndTag() throws JspException {
try {
JspWriter jw = pageContext.getOut();
jw.print("test: " + value);
} catch (IOException e) {
throw new JspException(e.getMessage());
}
return EVAL_PAGE;
}
}
package com.arkgame.study; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; public class CustomTag extends TagSupport { private static final long serialVersionUID = 1L; private String value; @Override public int doEndTag() throws JspException { try { JspWriter jw = pageContext.getOut(); jw.print("test: " + value); } catch (IOException e) { throw new JspException(e.getMessage()); } return EVAL_PAGE; } }
2.cft.tldファイルにタグを設定する
<tlib-version>1.0</tlib-version>
<short-name>cft</short-name>
<uri>/WEB-INF/cft</uri>
<tag>
<!-- タグの名前 -->
<name>TestTag</name>
<!-- タグクラス -->
<tag-class>com.arkgame.study.CustomTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tlib-version>1.0</tlib-version>
<short-name>cft</short-name>
<uri>/WEB-INF/cft</uri>
<tag>
<!-- タグの名前 -->
<name>TestTag</name>
<!-- タグクラス -->
<tag-class>com.arkgame.study.CustomTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tlib-version>1.0</tlib-version> <short-name>cft</short-name> <uri>/WEB-INF/cft</uri> <tag> <!-- タグの名前 --> <name>TestTag</name> <!-- タグクラス --> <tag-class>com.arkgame.study.CustomTag</tag-class> <body-content>empty</body-content> <attribute> <name>value</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag>
3.タグを利用
tldファイルを取り込む
<%@taglib prefix="cft" uri="/WEB-INF/cft" %>
JSP画面にカスタムタグを記載
<cft:TestTag value="${userData.memberId}" />