![]() ![]() ![]() ![]() |
以下の節では、タグ ライブラリ記述子 (TLD) を作成する方法について説明します。
タグ ライブラリを使用すると、開発者は関連する機能を持つタグを 1 つにまとめることができます。タグ ライブラリには、タグ拡張を記述し、それらを Java クラスに関連付けるタグ ライブラリ記述子 (TLD) ファイルが必要となります。TLD は、WebLogic Server とオーサリング ツールが拡張機能に関する情報を取得するために使用されます。TLD ファイルのファイル拡張子は .tld
で、このファイルは XML 表記で記述されます。
タグ ライブラリ記述子ファイル内の要素は、XSD に定義されている順序で並べます。この順序付けは、以下に示す手順で使用されます。TLD 要素がこの順序どおりに並べられていない場合、XML パーサは例外を送出します。
TLD の本体は、<taglib> ... </taglib>
要素の中にネストされた要素を含んでいます。これらのネストされた要素についても次の手順で説明します。このドキュメントでは、見やすくするためにネストされた要素はその親要素からインデントされていますが、TLD ではインデント処理は必要ありません。
「タグ ライブラリ記述子のサンプル」の例では、code
という新しいタグを宣言します。このタグの機能は、Java クラスの weblogic.taglib.quote.CodeTag
によって実装されます。
.tld
を付け、JSP を持つ Web アプリケーションの WEB-INF
ディレクトリに保存します。WEB-INF
ディレクトリの内容は非公開で、WebLogic Server によって HTTP を介して提供されません。
<taglib version="2.0" xmlns="http://java.sun.com/xml/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"> |
<taglib>
要素の中に埋めこみます。コンテンツには、タグ ライブラリに関する情報を含む要素と、各タグを定義する要素が含まれます。次に例を示します。
<taglib> ... body of taglib descriptor ... </taglib> |
<validator>
<name>tag_name</name>
WEB-INF/classes
ディレクトリの下に、パッケージ名を反映したディレクトリ構造に従って配置します。タグ ライブラリ jar ファイルにクラスをパッケージ化することもできます。詳細については、「JSP タグ ライブラリの JAR ファイルとしてのパッケージ化」を参照してください。
TagExtraInfo
のサブクラスを宣言します。タグが新しいスクリプト変数を定義しない場合、この要素は使われません。そのクラスの完全修飾パッケージ名を指定します。このクラスに含まれるタグの属性を検証できます。
WEB-INF/classes
ディレクトリの下に、パッケージ名を反映したディレクトリ構造に従って配置します。タグ ライブラリ jar ファイルにクラスをパッケージ化することもできます。詳細については、「JSP タグ ライブラリの JAR ファイルとしてのパッケージ化」を参照してください。
<taglib version="2.0" xmlns="http://java.sun.com/xml/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
<taglib>
<tlib-version>2.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>quote</short-name>
<uri>tag lib version id</uri>
<description>
This tag library contains several tag extensions
useful for formatting content for HTML.
</description>
<tag>
<name>code</name>
<tag-class>weblogic.taglib.quote.CodeTag</tag-class>
<body-content>tagdependent</body-content>
<attribute>
<name>fontAttributes</name>
</attribute>
<attribute>
<name>commentColor</name>
</attribute>
<attribute>
<name>quoteColor</name>
</attribute>
</tag>
</taglib>
JSP 2.0 コンテナでサポートされる DynamicAttributes インタフェースにより、開発の時点で名前が既知でなくても値が一貫性のある方法で処理されるタグを使用できます。たとえば、<table>
HTML タグの width
部分を、実行時に値を決定してカスタマイズする場合は、DynamicAttributes インタフェースを利用して、<table>
タグの他の部分 (border
、cellspacing
など) に指定を行うことなく、タグの変更する部分だけをカスタマイズできます。DynamicAttributes インタフェースを使用せずに width
の値を実行時に動的に決定するには、タグ ハンドラなどの複雑なコードを記述しなければなりません。
タグ ハンドラで動的な属性を受け付けるかどうかを最終的に決定するのは TLD です。タグ ハンドラで、TLD において動的な属性をサポートすると宣言しているにも関わらず、DynamicAttributes インタフェースがサポートされていない場合、タグ ハンドラはコンテナによって無効と見なされます。
呼び出されるタグの dynamic-attributes 要素 (作成されているタグ ライブラリのタグ要素の子要素) に、値 true が含まれている場合、以下の要件が適用されます。
以下の例では、属性 a および b が、TLD の属性要素で宣言されており、属性 d1 および d2 が宣言されておらず、dynamic-attributes 要素が true に設定されています。各属性は次の呼び出しを使用して設定します。
setA( "1" ),
setDynamicAttribute( null, "d1", "2" ),
setDynamicAttribute( "http://www.foo.com/jsp/taglib/mytag.tld", "d2", "3" ),
setB( "4" ),
setDynamicAttribute( null, "d3", "5" ), および
setDynamicAttribute( "http://www.foo.com/jsp/taglib/mytag.tld", "d4", "6" ).
<jsp:root xmlns:mytag="http://www.foo.com/jsp/taglib/mytag.tld" version="2.0">
<mytag:invokeDynamic a="1" d1="2" mytag:d2="3">
<jsp:attribute name="b">4</jsp:attribute>
<jsp:attribute name="d3">5</jsp:attribute>
<jsp:attribute name="mytag:d4">6</jsp:attribute>
</mytag:invokeDynamic>
</jsp:root>
タグにおいて動的な属性を受け付けると宣言するためには、DynamicAttributes
インタフェースが実装されている必要があります。構文は以下のとおりです。
public interface DynamicAttributes
また、動的な属性が受け付けられていることを示すために、TLD のタグのエントリをコンフィグレーションする必要があります。このタグの TLD で宣言されていない属性については、変換時にエラーを受け取るのではなく、その属性の名前と値で、setDynamicAttribute()
メソッドが呼び出されます。動的な属性の名前と値を記憶するようにタグをコンフィグレーションします。
setDynamicAttribute()
メソッドは、動的な属性を受け付けるように宣言されたタグが、TLD で宣言されていない属性を渡したときに、呼び出されます。構文は以下のとおりです。
public void setDynamicAttribute(java.lang.String uri, java.lang.String localName, java.lang.Object value)
タグ ハンドラが、所定の属性を受け付けないことを示す場合は、JspException
が送出されます。このタグに対して、コンテナは doStartTag()
または doTag()
を呼び出すことはできません。
これらのインタフェースの詳細については、「DynamicAttributes API」(http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/jsp/tagext/DynamicAttributes.html) を参照してください。
![]() ![]() ![]() |