| Oracle® Fusion Middleware Oracle WebLogic Server JSP Tag Extensions プログラマーズ ガイド 11g リリース 1 (10.3.1) B55531-01 |
|
![]() 戻る |
![]() 次へ |
以下の節では、カスタム JSP タグの機能、フォーマット、およびコンポーネントの概要、ならびにタグ ライブラリの作成とコンフィグレーションの手順について説明します。
カスタム JSP タグを作成するには、タグ ハンドラと呼ばれる Java クラスを作成します。
JSP 2.1 API には、JSP 2.1 仕様での説明どおり http://java.sun.com/products/jsp/reference/api/index.html で、カスタム タグ ハンドラの作成に使用するクラスとインタフェースのセットが説明されます。
javax.servlet.jsp.tagext API に関するドキュメントは、http://java.sun.com/products/jsp/2.1/docs/jsp-2_1-pfd2/index.html にあります。
タグ ハンドラは、次の 2 つのタイプのどちらかである必要があります。
以下の 3 つのインタフェースのいずれかを実装する従来のタグ ハンドラ。
Tag - インタフェースにアクセスする必要のないカスタム タグを作成している場合は、javax.servlet.jsp.tagext.Tag インタフェースを実装します。この API は、コンビニエンス クラス TagSupport も提供します。このクラスは、Tag インタフェースを実装し、このインタフェース内で定義されているメソッド用のデフォルトの空メソッドを提供します。
BodyTag - カスタム タグが本体を使用する必要がある場合、javax.servlet.jsp.tagext.BodyTag インタフェースを実装します。この API は、コンビニエンス クラス BodyTagSupport も提供します。このクラスは、BodyTag インタフェースを実装し、このインタフェース内で定義されているメソッド用のデフォルトの空メソッドを提供します。BodyTag は Tag を拡張したものであり、インタフェース メソッドのスーパーセットです。
IterationTag - 本体の再評価を制御する追加のメソッド doAfterBody() を定義して、tag を拡張する、javax.servlet.jsp.tagext.IterationTag インタフェースを実装します。
シンプル タグ ハンドラ (SimpleTag インタフェース)。
大幅に簡素化された呼び出しプロトコルを使用する場合は、javax.servlet.jsp.tagext.SimpleTag インタフェースを実装します。SimpleTag インタフェースでは、BodyTag インタフェースのように javax.servlet.jsp.tagext.Tag インタフェースを拡張しません。したがって、SimpleTag インタフェースは doStartTag() および doEndTag() メソッドをサポートするのではなく、SimpledoTag() メソッドを提供します。このメソッドはタグ呼び出しごとに一度だけ呼び出されます。
タグ ハンドラは、以下のいずれかの方法で作成します。
タグのライフサイクルの間に呼び出されるメソッドを定義する SimpleTag、Tag または BodyTag インタフェースを実装する。
SimpleTag、Tag、または BodyTag インタフェースを実装する抽象基本クラスを拡張する。
抽象基本クラスを拡張すると、タグ ハンドラ クラスがそのインタフェース内のすべてのメソッドを実装する必要がなくなります。また、他の便利な機能を使用できるようになります。SimpleTagSupport、TagSupport、および BodyTagSupport クラスが、SimpleTag、Tag、または BodyTag インタフェースを実装し、API に組み込まれます。
タグ ライブラリには、1 つ以上のカスタム JSP タグを格納することができます。タグ ライブラリは、タグ ライブラリ記述子 (.tld) ファイルで定義します。TLD は各タグの構文を記述し、その機能を実行する Java クラスにそのタグを関連付けます。
JSP タグ ライブラリは、1 つ以上のカスタム JSP タグを格納しており、タグ ライブラリ記述子 (.tld) ファイルで定義されます。JSP ページからカスタム タグ ライブラリを使用するには、以下のように <%@ taglib %> ディレクティブを使用してそのタグ ライブラリ記述子を参照します。次に例を示します。
<%@ taglib uri="myTLD" prefix="mytaglib" %>
uri
JSP エンジンは、Web アプリケーション デプロイメント記述子 (web.xml) の <taglib-uri> 要素で定義した uri と、この uri 属性を照合することによって、タグ ライブラリ記述子ファイルを見つけようとします。
|
注意 : .tld ファイルがデフォルトの場所 (/WEB-INF/ または /WEB-INF/tags/) にある場合、<%@ taglib uri='myTLD' prefix='mytaglib' %> である uri 値が .tld ファイルで指定されている uri と同じであれば、web.xml で <taglib> を記載する必要はありません。詳細については、JSP 2.1 仕様を参照してください。 |
たとえば、上の 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> タグの評価済み本体の一部になります。
本体付きタグの本体がまず JSP として評価され、ネストされた本体付きタグも含め、その中に入っているすべてのタグが変換され、さらにそれらの本体が再帰的に評価される。評価済み本体の結果が本体付きタグの出力として直接使用されるか、本体付きタグがその評価済み本体のコンテンツに基づいて出力を決定します。
本体付きタグの JSP から生成される出力は、通常の HTML として取り扱われる。つまり、出力はさらに JSP として解釈されることはありません。
カスタム タグは、以下のタスクを実行できます。
出力を生成する。タグの出力はその親スコープに送られます。スコープは以下のいずれかです。
そのタグが JSP ページに直接含まれる場合には、その JSP ページの出力が親スコープとなる。
そのタグが別の親タグ内でネストされている場合、その出力はその親タグの評価済み本体の一部になる。
JSP ページの中でスクリプト変数として参照および使用できる新しいオブジェクトを定義する。タグは、固定名前付きスクリプト変数を導入するか、id 属性を備えた動的名前付きスクリプト変数を定義できます。
一定の条件が満たされるまで、そのタグ本体のコンテンツの処理を繰り返す。これは、出力を反復的に生成するため、またはサーバ サイド アクションを繰り返し呼び出すために使用します。
その JSP ページの残りの部分を要求の一部として処理するか、それともスキップするかを決定する。
空タグは、そのタグの属性に基づいてサーバサイドの作業を実行できる。そのタグが実行するアクションによって、ページの残りの部分を解釈するか、それともリダイレクトなどの別のアクションを実行するかが決められます。この機能は、ユーザがページにアクセスする前にログインしたかどうかをチェックし、ログインしていなければログイン ページにリダイレクトする場合に役立ちます。
空タグは、その属性に基づいてページにコンテンツを挿入できる。このようなタグを使用すると、ページのヒット数を数える単純なカウンタや、その他のテンプレート ベースの挿入を実装できます。
空タグは、その属性に基づいて、ページの残りの部分で使用可能なサーバサイド オブジェクトを定義できる。このタグを使用すると、同じ JSP ページ内の他の場所でデータのクエリを受けることができる EJB への参照を作成することができます。
本体付きタグは、ブラウザに送信される HTML ページの一部となる前にその出力を処理し、その出力を評価して、ブラウザに送信する HTML を決定できる。この機能は、「引用 HTML」、つまり再フォーマットされたコンテンツを生成するために、または SQL クエリなどの他の関数に渡すパラメータとして使用できます (SQL クエリの場合、タグの出力はフォーマットされた結果セットとなる)。
本体付きタグは、特定の条件が満たされるまで、その本体を繰り返し処理できる。
カスタム JSP タグを作成および使用するには、以下の手順を実行します。
タグ ハンドラ クラスを記述します。JSP でカスタム タグを使用する場合、このクラスはそのタグの機能を実行します。タグ ハンドラ クラスでは、次の 3 つのインタフェースのいずれかが実装されます。
javax.servlet.jsp.tagext.BodyTag javax.servlet.jsp.tagext.Tag javax.servlet.jsp.tagext.SimpleTag
タグ ハンドラ クラスは、タグ ライブラリの一部として実装されます。詳細については、「タグ ハンドラの実装」を参照してください。
JSP ソース内で、JSP <taglib> ディレクティブを使用してタグ ライブラリを参照します。タグ ライブラリは、JSP タグを集めたものです。このディレクティブを JSP ソースの先頭に挿入します。詳細については、「JSP タグ ライブラリのコンフィグレーション」を参照してください。
タグ ライブラリ記述子 (TLD) を記述します。TLD は、タグ ライブラリを定義し、タグ ハンドラ クラス名、属性、タグに関するその他の情報など、各タグに関する追加情報を提供します。詳細については、「タグ ライブラリ記述子の作成」を参照してください。
TLD を、Web アプリケーション デプロイメント記述子 (web.xml) で参照してください。
JSP でカスタム タグを使用します。詳細については、「JSP タグ ライブラリのコンフィグレーション」を参照してください。