カスタムタグ(1)
| 1.カスタムタグとは カスタムタグは、JSP1.1から用いることができるようになりました。アクションタグのようにあらか じめ用意されているものを利用するのではなく、ユーザー独自のタグを定義することができます。 カスタムタグはファイルの関連が少しややこしくなるので、説明しにくいのですがプログラムを よく追いかけて考えてみてください。 カスタムタグはタグハンドクラスを呼び出すのですが、ただ単にクラスを呼び出すのではなくタグ ライブラリに定義します。タグライブラリ(.tld)というのはタグハンドクラスをまとめてライブラリにした ものです。タグライブラリを利用するにはデプロイメント・ディスタプリタ(web.xml)に定義し、それ をJSPのファイルから呼び出します。 それでは住所録ファイルを読み込んで表示するプログラムを作ってみます。普通にJSPファイル だけなら簡単なプログラムでもカスタムタグを使うとややこしくなるかもしれません。 AddressBookTag.java(タグハンドクラス)
して、これをコンパイルしてください。 本体の処理を必要としない場合はTagSupportクラスあるいはSimpleTagSupportクラスを継承して ください。その違いはSimplTagSupportクラスはdoTagメソッドだけをもつクラスに対して、TagSupport クラスは開始タグを処理するdoStartメソッド、終了タグを処理するdoEndTagメソッド、本体を処理した 後に処理されるdoAfterBodyと3つメソッドがあります。SimpleTagSupport簡単なタグの場合は便利 かもしれませんが、インスタンス生成するたびに生成されるので、パフォーマンスの低下しやすくなり ます。TagSupportクラスは3つのメソッドを持っているの用途ごとに使い分けができますし、1度使用 されたインスタンスは保持しつづけますので、何回も繰り返し使う場合はオーバーヘッドが少ないと いう特徴があります。本体を処理する場合はBodyTagSupportクラスを使います。メソッドは開始タグ の直後に呼び出されるdoStartメソッド、タグボディの処理の前に呼び出されるdoinitBodyメソッドと タグボディの処理後に呼び出されるdoAfterメソッド、終了タグの直後に呼び出されるdoEndTagが あります。 doStartTagとdoEndTagの戻り値
属性値をセットしたいので public void setFile(String file) { this.file = file; } このようにしておきます。 mytag.tld(タグライブラリディスタプリタ)
のprefixと一致するようにします。<tag.>にはタグライブラリに収容するタグハンドラクラスの情報を記述し ます。<tag>エレメントの中の<name>はjspで使用する名称を記述します。<tag-class>には パッケージ名.クラス名としてします。 属性値を取得したいので<attribute>エレメントを定義します。そしてカスタムタグで使用する名前を <name>に書いて、属性値が必須の場合は<required>をtrueで、そうでない場合はfalseとしておきます。 今回はファイル名は必須なのでtrueとします。 web.xml
<taglib-location>にはTLDの場所を記述します。 address.jsp
するのか記述しないとダメなので、<プレフィクス:タグ名 />で記述します。タグ名はTLDの<tag>エレメント の<name>と一致しなければいけません。 address.txt
%CATALINA_HOME%\webapps\samples/chap1/dataにaddress.txtを保存してください。 以下にアクセスしてみてください。 http://localhost:8080/samples/chap1/address.jsp ![]() |