TLDのソースコードを記述する
では、「mytag.tld」のソースコードを以下のように書き換えて保存してください。これが今回作成するタグを利用するための情報です。
<?xml version="1.0" encoding="UTF-8"?> <taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"> <tlib-version>1.0</tlib-version> <short-name>mytag.tld</short-name> <uri>/WEB-INF/mytag.tld</uri> <tag> <name>MyTag</name> <tag-class>jp.codezine.MySimpleTag</tag-class> <body-content>empty</body-content> </tag> </taglib>
タグライブラリに関する記述は、<taglib>というタグの中に記述します。この中に<tag>というタグを使って、使用するタグの情報を記述します。このタグ内に書く内容について整理をしておきましょう。
<tag> <name>タグ名</name> <tag-class>タグに使用するクラス</tag-class> <body-content>ボディとなるコンテンツの指定</body-content> </tag>
<name>によるタグ名は、実際にタグとしてJSP内から利用する際に使用されます。<tag-class>は、文字通りタグの内容を実装しているクラスの指定です。3番目の<body-content>はボディ部分(開始タグと終了タグの間の部分)に置かれる値に関する指定です。「empty」は、ボディ部分に値がないことを示します。
この例では、jp.codezine.MySimpleTagというクラスを「MyTag」というタグ名で使用するように指定していることがわかります。後はMySimpleTagクラスを定義すれば、カスタムタグができあがるというわけです。
タグ用クラスの作成
では、続いてクラスを作成しましょう。WTPにはタグ用のクラスを作成するための機能はありません。ごく一般的なクラスとして作成をします。ここでは、jp.codezineパッケージに「MySimpleTag」というクラスを作成することになります。
では、[ファイル]-[新規]-[その他]メニューを選び、ウィザードの選択画面で「クラス」を選択しましょう。

Javaクラスの設定画面が現れます。ここで、作成するタグクラスの内容についての設定を行います。
| 設定項目 | 設定値 |
| ソース・フォルダー | myweb/src |
| パッケージ | jp.codezine |
| エンクロージング型 | OFF |
| 名前 | MySimpleTag |
| 修飾子 | publicをON |
| スーパークラス | javax.servlet.jsp.tagext.SimpleTagSupport |
| インターフェース | OFF |
| 作成するメソッド・スタブの選択 | 継承された抽象メソッドのみON |
これで、「MySimpleTag」クラスが作成されます。続いて、作成したクラスにメソッドを実装しましょう。[ソース]-[メソッドのオーバーライド/実装]メニューを選び、現れたダイアログから、オーバーライドするメソッドとして「doTag」を選び、[OK]ボタンをクリックしてください。
これで、javax.servlet.jsp.tagext.SimpleTagSupportを継承し、doTagメソッドをオーバーライドした「MySimpleTag」クラスのソースコードが作成されました。後は、doTagメソッドに、実際にタグとして使われた際の処理を書くだけです。import文などもありますので、全ソースコードを掲載しておきましょう。
package jp.codezine; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; public class MySimpleTag extends SimpleTagSupport { public void doTag() throws JspException, IOException { super.doTag(); Locale.setDefault(new Locale("ja","JP","JP")); Calendar cal = Calendar.getInstance(); SimpleDateFormat format = new SimpleDateFormat("GGGGyyyy年M月d日"); JspWriter out = this.getJspContext().getOut(); out.println("<strong>"); out.println(format.format(cal.getTime())); out.println("</strong>\n"); } }


