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テンプレートにカスタムタグを埋め込んでいくことでページを作るという考え方です
カスタムタグは、通常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"/]] のように記述して使用します。 カスタムタグのサンプルコード:
カスタムタグを利用するためには、EZServletのHTMLテンプレートをハンドリングするサーブレットが少なくとも1つ必要です。サンプルコードEZFileServletの様に、単純に指定されたファイルを返すサーブレットを利用する形でもよいでしょう。
また、通常はサーブレットとしてWEBアプリケーションを開発する場合でも、あちこちのページで登場する共用コンポーネントのようなものは、カスタムタグとして作ったほうが簡単に再利用できてよいでしょう。
EZServlet 2001.1.02以降では、プリセットプロパティで予め設定されたカスタムタグが用意されています。これらのプリセットカスタムタグは何も設定することなくすぐにテンプレートの中で使用することができます。