![]() ![]() ![]() ![]() |
以下の節では、カスタム JSP タグの機能、フォーマット、およびコンポーネントの概要、ならびにタグ ライブラリの作成とコンフィグレーションの手順について説明します。
カスタム JSP タグを作成するには、タグ ハンドラと呼ばれる Java クラスを作成します。
JSP 2.1 API には、カスタム タグ ハンドラの作成に使用するクラスとインタフェースのセットが定義されています (JSP 2.1 仕様を参照)。
javax.servlet.jsp.tagext
API に関するドキュメントは、http://java.sun.com/products/jsp/2.1/docs/jsp-2_1-pfd2/index.html にあります。
タグ ハンドラは、次の 2 つのタイプのどちらかである必要があります。
javax.servlet.jsp.tagext.Tag
インタフェースを実装します。この API は、コンビニエンス クラス TagSupport
も提供します。このクラスは、Tag
インタフェースを実装し、このインタフェース内で定義されているメソッド用のデフォルトの空メソッドを提供します。
javax.servlet.jsp.tagext.BodyTag
インタフェースを実装します。この API は、コンビニエンス クラス BodyTagSupport
も提供します。このクラスは、BodyTag
インタフェースを実装し、このインタフェース内で定義されているメソッド用のデフォルトの空メソッドを提供します。BodyTag
は Tag
を拡張したものであり、インタフェース メソッドのスーパーセットです。
doAfterBody()
を定義して、Tag
を拡張する、javax.servlet.jsp.tagext.IterationTag
インタフェースを実装します。
SimpleTag
インタフェース)。
大幅に簡素化された呼び出しプロトコルを使用する場合は、javax.servlet.jsp.tagext.SimpleTag
インタフェースを実装します。SimpleTag
インタフェースでは、BodyTag
インタフェースのように javax.servlet.jsp.tagext.Tag
インタフェースを拡張しません。したがって、SimpleTag
インタフェースは doStartTag() および doEndTag() メソッドをサポートするのではなく、単純な doTag() メソッドを提供します。このメソッドはタグ呼び出しごとに一度だけ呼び出されます。
抽象基本クラスを拡張すると、タグ ハンドラ クラスがそのインタフェース内のすべてのメソッドを実装する必要がなくなります。また、他の便利な機能を使用できるようになります。SimpleTagSupport
、TagSupport
、および BodyTagSupport
クラスが、SimpleTag
、Tag
、または BodyTag
インタフェースを実装し、API に組み込まれます。
タグ ライブラリには、1 つ以上のカスタム JSP タグを格納することができます。タグ ライブラリは、タグ ライブラリ記述子 (.tld
) ファイルで定義します。TLD は各タグの構文を記述し、その機能を実行する Java クラスにそのタグを関連付けます。
JSP タグ ライブラリは、1 つ以上のカスタム JSP タグを格納しており、タグ ライブラリ記述子 (.tld
) ファイルで定義されます。JSP ページからカスタム タグ ライブラリを使用するには、以下のように <%@ taglib %>
ディレクティブを使用してそのタグ ライブラリ記述子を参照します。次に例を示します。
<%@ taglib uri="myTLD" prefix="mytaglib" %>
uri
(web.xml)
の <taglib-uri>
要素で定義した uri
と、この uri
属性を照合することによって、タグ ライブラリ記述子ファイルを見つけようとします。たとえば、上の taglib
ディレクティブの myTLD
は、次のように Web アプリケーション デプロイメント記述子のタグ ライブラリ記述子 (library.tld)
を参照します。
<taglib>
<taglib-uri>myTLD</taglib-uri>
<taglib-location>library.tld</taglib-location>
</taglib>
prefix
prefix
属性は、タグ ライブラリにラベルを割り当てます。カスタム JSP タグを使用してページを作成する場合は、このラベルを使って関連するタグ ライブラリを参照します。たとえば、上の例のライブラリ (mytaglib
) が newtag
という新しいタグを定義した場合、このタグを JSP ページで使用するには、以下のように記述します。
<mytaglib:newtag>
詳細については、「タグ ライブラリ記述子の作成」を参照してください。
カスタム タグのフォーマットは、空タグと呼ばれる空のものか、本体付きタグと呼ばれる本体を含むものです。どちらのタイプのタグも、そのタグを実装する Java クラスに渡される複数の属性を受け付けます。詳細については、「タグ本体内の例外処理」を参照してください。
<mytaglib:newtag attr1="aaa" attr2="bbb" ... />
<mytaglib:newtag attr1="aaa" attr2="bbb" ... >
body
</mytaglib:newtag>
タグ本体には、多くの JSP 構文、およびネストされた本体を持つ別のカスタム JSP タグを入れることができます。タグは、お互いの内部で任意のレベルにネストできます。次に例を示します。
<mytaglib:tagA>
<h2>これは tagA の本体です</h2>
このテキストはこれまでに <mytaglib:counter /> 回現れました !
<p>
<mytaglib:repeater repeat=4>
<p>Hello World!
</mytaglib:repeater>
</mytaglib:tagA>
上の例では、3 つのカスタム タグを使用して、本体付きタグの中にタグをネストする方法が示されています。これらのタグは、以下のように機能します。
<mytaglib:tagA>
は、その評価済み本体からの HTML 出力しか認識しない。つまり、ネストされた JSP タグの <mytaglib:counter>
と <mytaglib:repeater>
がまず評価され、それらの出力が <mytaglib:tagA>
タグの評価済み本体の一部になります。
id
属性を備えた動的名前付きスクリプト変数を定義できます。
カスタム JSP タグを作成および使用するには、以下の手順を実行します。
javax.servlet.jsp.tagext.BodyTag
javax.servlet.jsp.tagext.SimpleTag
タグ ハンドラ クラスは、タグ ライブラリの一部として実装されます。詳細については、「タグ ハンドラの実装」を参照してください。
<taglib>
ディレクティブを使用してタグ ライブラリを参照します。タグ ライブラリは、JSP タグを集めたものです。このディレクティブを JSP ソースの先頭に挿入します。詳細については、「JSP タグ ライブラリのコンフィグレーション」を参照してください。web.xml
) で参照します。
![]() ![]() ![]() |