Java 開発者は、タグハンドラの開発時に、次のタスクを行う責任があります。
taglib
要素の作成次のセクションでは、クラスとインターフェイス、およびタグハンドラの作成方法について説明します。
カスタムタグやタグライブラリのコーディングには、javax.servlet.jsp.tagext
パッケージのクラスとインターフェイスを使用します。次の図は、これらのクラスとインターフェイスの関係を示しています。
次の表で、プライマリクラスおよびインターフェイスについて説明します。
各インターフェイスにより、前のインターフェイスが拡張されます。その結果 IterationTag
インターフェイスには、Tag
のメソッドだけでなく追加の機能も含まれます。BodyTag
インターフェイスには、他の 2 つのインターフェイスに含まれるすべてのメソッドと追加機能が含まれます。
タグライブラリのプログラミングで使用するクラスとインターフェイスの詳細については、JRun/docs ディレクトリにある JavaDocs を参照してください。
javax.servlet.jsp.tagext
パッケージを拡張する各インターフェイスは、その前にパッケージを拡張します。その結果、IterationTag
インターフェイスには Tag
インターフェイスのすべての機能と追加メソッドが、BodyTag
インターフェイスには IterationTag
インターフェイスのすべての機能と追加メソッドが含まれます。
カスタムタグハンドラのあらゆる実装で、BodyTag
インターフェイスは排他的に使用され、機能やパフォーマンスに影響を及ぼすことはありません。これにより、最大限の柔軟性と複雑さが同時に実現されます。Tag
インターフェイスと IterationTag
インターフェイスが含まれることにより、あまり多くのメソッドを使用しない、より明解な実装を実現できます。
BodyTag
を使用する利点の 1 つに、インターフェイスを変更せずに Web アプリケーションに機能を追加できる点があります。Tag
インターフェイスを使用する場合は、タグハンドラが使用するインターフェイスを変更しないかぎり、タグハンドラを使用して本文テキストのループ処理はできません。IterationTag
インターフェイスを使用する場合は、インターフェイスを変更しないかぎり、タグハンドラを使用して本文コンテンツのバッファリングや変更はできません。
Tag
インターフェイスを拡張します。
TagSupport
クラスを実装します。doStartTag
をオーバーライドします。TagSupport
または BodyTagSupport
から継承された doEndTag
メソッドをオーバーライドします。
TagSupport
を拡張すると、doStartTag
メソッドおよび doEndTag
メソッドは、次の戻り値 (定数として定義済み) を使用します。
doStartTag
は、次のいずれかの値を返します。
EVAL_BODY_INCLUDE
開始タグと終了タグの間の本文テキスト (JSP コードを含む) を受け入れます。ただし、doEndTag
メソッドでは本文テキストを使用できないことに注意してください。
SKIP_BODY
本文テキストを無視します。開始タグと終了タグの間にあるテキストは評価せず、表示しません。doEndTag
は、次のいずれかの値を返します。EVAL_PAGE
ページの評価を続行します。
SKIP_PAGE
ページの残りを無視します。
次のタグハンドラは、doStartTag
メソッドと doEndTag
メソッドから HTML を出力します。この HTML は JSP ページのタグの内容を形成します。
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*; import java.io.IOException;
public class SimpleTag extends TagSupport {
/** * タグが開始されたら実行します。 */ public int doStartTag() throws JspException { try { pageContext.getOut().print("<h2>Hello from doStartTag()</h2>"); // タグの本文でテキストを使用できるようにします。 return EVAL_BODY_INCLUDE; } catch(IOException ioe) { throw new JspException(ioe.getMessage()); } }
/**
* 終了タグを実行します。 */ public int doEndTag() throws JspException { try { pageContext.getOut().print("<h2>Hello from doEndTag()</h2>"); // ページの評価を継続します。 return EVAL_PAGE; } catch(IOException ioe) { throw new JspException(ioe.getMessage()); } } }
このカスタムタグハンドラをコンパイルして JRun 環境に追加すると、次の行を JSP に追加することによって、このタグを呼び出すことができます。
<prefix:simpletag />
コンパイル済みのタグハンドラクラスは、次のいずれかの格納場所に保存します。
推奨されている TLD ファイルの配置方法など、その他のパッキング情報については、 「タグライブラリのパッケージング」 を参照してください。
JSP でタグハンドラのクラスを使用するには、web.xml ファイルに taglib
要素を追加し、TLD ファイルでタグを定義し、JSP の TLD の URI にリンクする必要があります。
web.xml ファイルへの taglib
要素の追加の詳細については、 「タグライブラリのパッケージング」 を参照してください。
TLD ファイルの作成の詳細については、 「TLD ファイルの作成」 を参照してください。JSP の TLD へのリンクの詳細については、 「タグライブラリの使用」 を参照してください。