高度な使用方法

このセクションでは、JST の高度な使用方法について説明します。

複数のハンドラの実装

デフォルトでは、JST ページでは doStartdoEnd、または doAfterBody のいずれかのハンドラを実装します。ただし、Java で追加のハンドラをコーディングして宣言で定義すると、JST ページにハンドラを追加できます。例については、 「ループ」 を参照してください。

ファイル拡張子 .jst の再マッピング

JSP ベースのカスタムタグには、.jst 以外のファイル拡張子を使用できます。拡張子を変更するには、JRun サーバ用の default-web.xml ファイルにある JSTServlet の servlet-mapping 要素を修正します。

次の例では、JST 接尾辞を .jtg に設定します。

<servlet-mapping>
  <servlet-name>JSTServlet</servlet-name>
  <url-pattern>*.jtg</url-pattern>
</servlet-mapping>

JST へのリクエストのマッピング

設定ファイルのリクエストをマッピングする際、サーブレットや他のファイルと同様に 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>");
 } 
%>