このセクションでは、JST の高度な使用方法について説明します。
デフォルトでは、JST ページでは doStart
、doEnd
、または doAfterBody
のいずれかのハンドラを実装します。ただし、Java で追加のハンドラをコーディングして宣言で定義すると、JST ページにハンドラを追加できます。例については、 「ループ」 を参照してください。
JSP ベースのカスタムタグには、.jst 以外のファイル拡張子を使用できます。拡張子を変更するには、JRun サーバ用の default-web.xml
ファイルにある JSTServlet の servlet-mapping
要素を修正します。
<servlet-mapping>
<servlet-name>JSTServlet</servlet-name> <url-pattern>*.jtg</url-pattern> </servlet-mapping>
設定ファイルのリクエストをマッピングする際、サーブレットや他のファイルと同様に JST を使用できます。たとえば、exeption500.jst ファイルを エラーコード 500 (サーバエラー) に相当するエラーにマッピングするために、Web アプリケーションの web.xml ファイルにあるマッピングの例を使用します。
<error-page>
<error-code>500</error-code> <location>/exception500.jst</location> </error-page>
次の例のように、JSP にある page
ディレクティブの errorPage
属性を用いて JST をマッピングできます。
<%@ page errorPage="/exception500.jst" %>
...
JST は再帰呼び出しをサポートしています。これによって、JST 自身を呼び出しても、無限ループに入ることはありません。次のコードは、基本的なダンプ処理を行う再帰呼び出しタグの例を示したものです。
<%-- recursiveTag.jsp で使用--%>
<%@ taglib uri="." prefix="jst" %> <%@ page import="java.util.*" %> <%@ tagAttribute name="var" required="true" type="java.lang.Object" rtexprvalue="true" %> <% String theClass=var.getClass().getName(); if (theClass.trim() == "java.util.Vector") { out.print("<table border=1><tr><td colspan=3>" + theClass + "</td></tr>"); out.print("<tr><th></th><th>タイプ</th><th>値</th></tr>"); Vector v=(Vector) var; Enumeration e=v.elements(); while (e.hasMoreElements()) { out.print("<tr>"); %> <jst:_dump var="<%= e.nextElement() %>" /> <%out.print("</tr>"); } out.print("</table>"); } else { out.print("<td></td><td><strong>" + theClass + "</strong></td><td>" + var.toString() + "</td>"); } %>