PRODUCT: EZServlet Package: EZ�N�b�N

カスタムタグでぱずりんぐ?
更新履歴:
プリセットカスタムタグについて追記(2003/11/04)
リリース(2002/10/25)

目次:
1. カスタムタグってなに?

EZServletの基本は、テンプレートにあけられた「タグ」という穴を埋めることでページを作るってことは、もうご存知ですよね?以前のバージョンでは、アプリケーションで処理するための「ふつーの」タグ、[[<tagname>]]のほかには、[[#include]]や[[#table..]]、[[$<varname>]]があったけど、2001.0.05から[[#$<custom_tag_name>]]という形式のタグが使えるようになりました。この[[#$<custom_tag_name>...]]がカスタムタグ。

カスタムタグは その名前(custom_tag_name)ごとにハンドラクラスを定義できて、テンプレートがロードされたときや、ブラウザにレスポンスを返す直前に、ハンドラクラスで処理をすることができるのです。もちろん、通常、このカスタムタグハンドラクラスでは何らかのHTMLを出力するように作るので、HTMLの一部をカスタムタグで生成させることができるのです。

EZServletの考え方は、1つのHTMLページを生成するために、1つのサーブレットを作成する、という考え方でしたが、カスタムタグでは、HTMLの部品を生成するカスタムタグハンドラを予め用意しておいて、HTMLテンプレートにカスタムタグを埋め込んでいくことでページを作るという考え方です


2. カスタムタグを作ってみよう!

カスタムタグは、通常com.ngMAT.HTML.EZSCustomTagのサブクラスとして作ります。実装しなければならないメソッドは以下の4つになります。もちろん、必要ないメソッドは空っぽでかまいません。

init():
カスタムタグの初期化処理を記述します。super.getAttribute (String name)などを使用して、タグの属性を取得して、本処理の準備をします。

loaded():
テンプレートの読み込みが完了した時点で呼び出されます。 このタイミングで処理すべきことを記述します。

fix():
ブラウザにレスポンスを返す直前に呼び出されます。 このタイミングで処理すべきことを記述します。

toHTML():
ブラウザにレスポンスを返す直前に呼び出されます。最終的なHTML文字列を構築する処理を記述します。

さて、できあがったカスタムタグはそのままではテンプレート中で使用することができません。EZServletのサーブレットプロパティに、カスタムタグハンドラを登録してやる必要があります。

HTMLTemplate.CustomTag.<tagname>.Handler=<customtag handler class name>

実際には、
HTMLTemplate.CustomTag.now.Handler=com.ngMAT.appl.etc.customtags.Now
の様に記述します。テンプレート中では
 [[#$now/]]

 [[#$now timestamp_format="MM/dd HH:mm"/]]
のように記述して使用します。

カスタムタグのサンプルコード:
Now 現在時刻を出力する超単純な例。

3. カスタムタグの使い道

カスタムタグを利用するためには、EZServletのHTMLテンプレートをハンドリングするサーブレットが少なくとも1つ必要です。サンプルコードEZFileServletの様に、単純に指定されたファイルを返すサーブレットを利用する形でもよいでしょう。

また、通常はサーブレットとしてWEBアプリケーションを開発する場合でも、あちこちのページで登場する共用コンポーネントのようなものは、カスタムタグとして作ったほうが簡単に再利用できてよいでしょう。

4. すぐに使えるカスタムタグ

EZServlet 2001.1.02以降では、プリセットプロパティで予め設定されたカスタムタグが用意されています。これらのプリセットカスタムタグは何も設定することなくすぐにテンプレートの中で使用することができます。

タグ名対応クラス説明
cookie com.ngMAT.HTML.ezscustomtag.Cookie name属性で指定されるcookieの値を出力
param com.ngMAT.HTML.ezscustomtag.Parameter name属性で指定されるHTTPパラメタの値を出力
session com.ngMAT.HTML.ezscustomtag.SessionValue name属性で指定されるHTTPセッションオブジェクトの値を出力
jsessionid com.ngMAT.HTML.ezscustomtag.JSessionID HTTPセッションIDを出力
now com.ngMAT.HTML.customtag.Now 現在時刻を出力
empty com.ngMAT.HTML.customtag.Empty 何も出力しない
here com.ngMAT.HTML.ezscustomtag.Here リクエストURLを出力
cp_sym com.ngMAT.HTML.ezscustomtag.CellPhoneSymbol name属性で指定される携帯電話絵文字を出力