JSP2.0は、理解しやすく、使いやすいなあと常々思っています。
今日は、JSP2.0からの新機能で、非常に便利だが、あまり知られていない「タグファイル」について簡単に紹介します。
従来からのJSPでは、「カスタムタグ」という機能で、JSPでのHTMLコードの再利用が可能でした。
しかし、このカスタムタグは作るのが面倒だったため、フレームワーク作成以外では、あまり流行っていなかったです。
今回紹介するタグファイルは、このカスタムタグと同等の機能を持ちつつ、作成を簡単にしたものです。
どれぐらい簡単かというと、これぐらい違います。
カスタムタグ | タグファイル | |
---|---|---|
タグハンドラクラスの作成 | 要 | – |
TLDファイルの作成 | 要 | – |
web.xmlでのTLD宣言 | 任意 | – |
taglibディレクティブの記述 | 要 | 要 |
tagファイルの作成 | – | 要 |
タグファイルの場合は、カスタムタグで使用するTLDファイルが必要ないです。
代わりにタグファイル自身に、同様のTLDファイルで記述するような属性の定義が記述できます。
タグファイルの作成
方法はとても簡単です。なぜなら、基本的な記述の仕方はJSPと同じだからです。
この点においてもカスタムタグと比べて記述が楽です。(カスタムタグの場合は、JSPWriterオブジェクトを取得して、println()などでHTMLコードを出力していた)
ここでは、掛け算をするためのタグファイルを作成します。使い方としては、次のような使い方を想定します。
このように記述すると、3*5=15と表示するようにします。
簡単なのですぐにコードを示します。
(sample.tag)
<%@ tag pageEncoding="utf-8"%>
<%@ attribute name="val1" type="java.lang.Integer" required="true"%>
<%@ attribute name="val2" type="java.lang.Integer" required="true"%>
${val1} * ${val2} = ${val1 * val2}
これをsample.tagというファイル名にして、WEB-INF/tagsディレクトリに置くことにします。
読めばわかるように、JSPと同じ記法で記述できます。
<%@ attribute %>
というのが、このタグの属性で、2つの属性を持つことが読み取れます。
JSPからの利用
JSPから使用するには、カスタムタグと同じようにtaglibディレクティブの宣言を必要とします。
タグファイルの場合は、カスタムタグと違って、tagdir属性を使ってタグファイルを格納したフォルダを指定します。
したがって、JSPはこんな感じになります。
(sample.jsp)
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
sample.tagで指定したように、2つの属性val1,val2を指定します。これだけ。
タグハンドラクラスのコンパイルも、TLDファイルの作成も不要です。なんて便利なんでしょう。
sample.tagというファイル名だから、
というタグ名になっています。
今回紹介したのはタグファイルの、もっとも基本的な部分です。
さらに詳細な使い方は、こちらが参考になります。
タグファイル JSP -TECHSCORE-
Tomcat5の新機能第2回:EL式とタグファイル – STACK(*)