//(1)J2SDK1.4からデフォルトパッケージをインポートすることは // できなくなったため、JSPプログラムからインポートできる // ようにパッケージを宣言します。 package tags; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; //(2)Tagインタフェースを実装します。 public class helloNameTag implements Tag { private PageContext pageContext; private Tag parentTag; private String name; //(3)setPageContextメソッド、setParentメソッド、getParent // メソッドはほぼ決まりきった記述です。特別な処理の行わ // ない場合は、この記述を行います。 public void setPageContext(PageContext pageContext) { this.pageContext = pageContext; } public void setParent(Tag parentTag) { this.parentTag = parentTag; } public Tag getParent() { return this.parentTag; } //(4)属性に指定された値を保存するsetメソッドです。 public void setName(String name) { this.name = name; } //(5)開始タグが呼び出されるときに実行されるdoStartTagメソ // ッドです。"Hello"という値と属性に指定された値を表示 // する処理を記載します。処理が終わるとSKIP_BODYを返し、 // タグの本体を評価しないことを表します。 public int doStartTag() throws JspException { try { JspWriter out = pageContext.getOut(); out.print("Hello " + name); } catch(Exception e) { throw new JspException(e.getMessage()); } return SKIP_BODY; } //(6)終了タグが呼び出されるときに実行されるdoEndTagメソッ // ドです。EVAL_PAGEを返し、終了タグ以降のJSPページを実 // 行することを表します。 public int doEndTag() throws JspException { return EVAL_PAGE; } //(7)タグハンドラクラスのオブジェクトが不要と判断されたと // きに実行されます。 public void release() {} }
<?xml version="1.0" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>helloNameTag</short-name> <tag> <!-- (1)JSPプログラムで使用されるタグの名前です。 --> <name>helloNameTag</name> <!-- (2)タグハンドラクラスをパッケージ名から指定します。 --> <tag-class>tags.helloNameTag</tag-class> <body-content>empty</body-content> <!-- (3)属性を定義します。 --> <attribute> <name>name</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
<%@ page contentType="text/html; charset=windows-31j" import="tags.*" %> <%@ taglib uri="http://www.javaroad.jp/tags/helloName" prefix="hello" %> <HTML> <BODY> <%-- (1)タグ名にtldファイルで指定したタグ名"helloNameTag"を、 属性名に同じくtldファイルで指定した属性名"name"を、 属性値に"java"を指定しています。 --%> <hello:helloNameTag name="java" /> </BODY> </HTML>