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