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" />