JSPカスタム・タグ
カスタムラベルは、ユーザー定義JSP言語要素です。 JSPページが含まれている場合は、カスタムタグが実行Webコンテナのサーブレットがこれらの操作を呼び出すと、そのオブジェクトのラベルの変換は、タグ・ハンドラの操作と呼ばれ、サーブレットに変換されます。
JSPタグの拡張機能は、新しいラベルを作成することができますし、JSPページに直接挿入することができます。 JSP 2.0仕様では、これらのカスタムタグを書くための簡単なタグ・ハンドラを導入しました。
あなたはSimpleTagSupportをクラスを継承し、シンプルなカスタムラベルを開発するためにdoTag()メソッドをオーバーライドすることができます。
「こんにちは」のラベルを作成します。
次に、我々はと呼ばれるカスタムラベルを作成する<例:こんにちは>、タグ形式:
<ex:Hello />
カスタムJSPタグを作成するには、まずJavaクラスとラベルの契約を作成する必要があります。 だから、次のようにのは、HelloTagクラスを作成してみましょう:
package com.w3big; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport { public void doTag() throws JspException, IOException { JspWriter out = getJspContext().getOut(); out.println("Hello Custom Tag!"); } }
次のコードはdoTag()メソッドをオーバーライドし、この方法はgetJspContext()現在するJspContextオブジェクトを取得するための方法、および使用される「ハローカスタムタグを!」のJspWriterオブジェクトに渡されます。
上記のクラスをコンパイルし、環境変数CLASSPATHのディレクトリにコピーします。 <Tomcatのインストールディレクトリ> WebアプリケーションのROOT \ WEB-INF \のcustom.tld \:最後に、以下のタグライブラリを作成します。
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Example TLD</short-name> <tag> <name>Hello</name> <tag-class>com.w3big.HelloTag</tag-class> <body-content>empty</body-content> </tag> </taglib>
次に、我々は、JSPファイル内のHelloタグを使用することができます。
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%> <html> <head> <title>A sample custom tag</title> </head> <body> <ex:Hello/> </body> </html>
上記のプログラムの出力は、次のとおりです。
Hello Custom Tag!
[アクセス]タブ本体
同じ標準タグライブラリは、ラベル内のメッセージの内容が含まれているようにあなたがすることができます。 私たちはハローのコンテンツを含めるように、次のように、我々は、カスタム書式は次のとおりです。
<ex:Hello> This is message body </ex:Hello>
次のように我々は、タグハンドラクラスファイルを変更することができます。
package com.w3big; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport { StringWriter sw = new StringWriter(); public void doTag() throws JspException, IOException { getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString()); } }
次に、以下のようにTLDファイルを変更する必要があります。
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Example TLD with Body</short-name> <tag> <name>Hello</name> <tag-class>com.w3big.HelloTag</tag-class> <body-content>scriptless</body-content> </tag> </taglib>
次のように今、私たちは、JSPに変更されたラベルを使用することができます。
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%> <html> <head> <title>A sample custom tag</title> </head> <body> <ex:Hello> This is message body </ex:Hello> </body> </html>
次のように上記のプログラムの出力は、次のとおりです。
This is message body
カスタムタグの属性
次のように、setterメソッドを実装する必要があり、カスタムタグクラスの値をプロパティを受信するために、さまざまなプロパティにカスタム条件を設定することができ、JavaBeanのセッターメソッドは次のとおりです。
package com.w3big; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport { private String message; public void setMessage(String msg) { this.message = msg; } StringWriter sw = new StringWriter(); public void doTag() throws JspException, IOException { if (message != null) { /* 从属性中使用消息 */ JspWriter out = getJspContext().getOut(); out.println( message ); } else { /* 从内容体中使用消息 */ getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString()); } } }
()プロパティの名前は、「メッセージ」であるため、セッターはsetMessageです。 それでは、このプロパティを追加するTLDファイルの<attribute>要素を使用してみましょう:
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Example TLD with Body</short-name> <tag> <name>Hello</name> <tag-class>com.w3big.HelloTag</tag-class> <body-content>scriptless</body-content> <attribute> <name>message</name> </attribute> </tag> </taglib>
以下に示すように、今、私たちは、JSPファイル内のメッセージのプロパティを使用することができます。
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%> <html> <head> <title>A sample custom tag</title> </head> <body> <ex:Hello message="This is custom tag" /> </body> </html>
上記のデータ出力の例です。
This is custom tag
あなたはまた、次のプロパティを含めることができます。
プロパティ | 説明 |
---|---|
名前 | プロパティの名前を定義します。 各タグは、属性名は一意である必要があります。 |
必須 | 偽のオプションに設定した場合、属性が、必須かオプションかを指定します。 |
rtexprvalue | あなたは文の式を実行すると、タグ属性が有効です。 |
タイプ | プロパティのJavaクラスのタイプを定義します。 デフォルトは文字列として指定されています |
説明 | 説明 |
断片 | あなたは、プロパティを宣言すると、プロパティ値はたJspFragmentとして扱われます。 |
これらは、指定されたインスタンスに関連付けられた属性です。
..... <attribute> <name>attribute_name</name> <required>false</required> <type>java.util.Date</type> <fragment>false</fragment> </attribute> .....
あなたは2つのプロパティを使用する場合は、次のように、TLDファイルを変更します。
..... <attribute> <name>attribute_name1</name> <required>false</required> <type>java.util.Boolean</type> <fragment>false</fragment> </attribute> <attribute> <name>attribute_name2</name> <required>true</required> <type>java.util.Date</type> </attribute> .....