単一タグのカスタムタグの例として、「Hello World!」を表示するカスタムタグを作成してみます。
JSPでカスタムタグを利用するためには、taglibディレクティブを指定する必要があります。 カスタムタグは、<プレフィックス:タグ名 />で指定します。
| HelloTag.jsp |
|---|
<%@ page contentType="text/html; charset=Shift_JIS" %> <%@ taglib prefix="ash" uri="http://ash.jp/taglib_1_0" %> <html> <head> <title>Hello カスタムタグ</title> </head> <body> <h1>Hello カスタムタグ</h1> <p><ash:hello /></p> </body> </html> |
タグハンドラは、doStartTagメソッドのみ実装します。 「Hello World!」を表示すると、SKIP_BODYを返却しているため、BODYの処理を行われません。
| HelloTag.java |
|---|
package jp.ash.taglib;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
/**
* 「Hello World!」表示タグライブラリ
**/
public class HelloTag extends TagSupport {
public int doStartTag() throws JspException {
try {
pageContext.getOut().print("Hello World!");
} catch(Exception ex) {
throw new JspException(ex);
}
return SKIP_BODY;
}
}
|
属性は、タグハンドラクラスに属性名のセッタメソッド(setXXX)を作成するだけです。セッタメソッドは、set + 「変数名の先頭を大文字にした名前」のメソッドのことです。 セッタメソッドを作成しておくと、JSPで属性を設定すると、setPageContextで自動的に設定されます。
カスタムタグは、<プレフィックス:タグ名 属性名="属性値" />で指定します。
| EchoTag.jsp |
|---|
<%@ page contentType="text/html; charset=Shift_JIS" %> <%@ taglib prefix="ash" uri="http://ash.jp/taglib_1_0" %> <html> <head> <title>Echo カスタムタグ</title> </head> <body> <h1>Echo カスタムタグ</h1> <p><ash:echo msg="Hello World!" /></p> </body> </html> |
タグハンドラクラスでは、属性名のセッタメソッド(setMsg)を作成します。
| EchoTag.java |
|---|
package jp.ash.taglib;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
/**
* メッセージ表示タグライブラリ
**/
public class EchoTag extends TagSupport {
private String msg;
/** msgの設定 **/
public void setMsg(String msg) {
this.msg = msg;
}
/** タグ初期処理 **/
public int doStartTag() throws JspException {
try {
pageContext.getOut().print(msg);
} catch(Exception ex) {
throw new JspException(ex);
}
return SKIP_BODY;
}
}
|
タグライブラリの情報をタグライブラリ記述子に設定します。
| taglib.tld |
|---|
<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>ash</short-name>
<uri>http://ash.jp/taglib_1_0</uri>
<description>ASHのタグライブラリ</description>
<tag>
<name>hello</name>
<tag-class>jp.ash.taglib.HelloTag</tag-class>
<body-content>empty</body-content>
<description>「HelloWorld!」を表示</description>
</tag>
<tag>
<name>echo</name>
<tag-class>jp.ash.taglib.EchoTag</tag-class>
<body-content>empty</body-content>
<description>msg内容を表示</description>
<attribute>
<name>msg</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>
|
タグライブラリ記述子をデプロイメント記述子に設定します。
| web.xml |
|---|
<?xml version="1.0" ?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<taglib>
<taglib-uri>http://ash.jp/taglib_1_0</taglib-uri>
<taglib-location>/WEB-INF/taglib.tld</taglib-location>
</taglib>
</web-app>
|