JST の例

このセクションでは、JST の例をいくつか説明します。このセクションの例を使用する場合は、次のことを行う必要があります。

簡単な例

このセクションでは、JST の簡単な例を示します。

JST ページ

次のコードをアプリケーションのルートディレクトリに simple.jst として保存します。

<%-- simple.jst --%>
<p>JRun サーバのタグです。</p>

JSP

次のコードを拡張子 .jsp を持つページとしてアプリケーションのルートディレクトリに
保存します。

<%@ taglib prefix="t" uri="/" %>
<t:simple/>

属性との対話

このセクションでは、属性と対話する JST の呼び出し方法について説明します。

JST ページ

サンプルの JST にエラーメッセージが表示されます。前のページに戻るボタンと、2 つの属性が表示されます。

次のコードを Web アプリケーションのルートディレクトリに message.jst として保存します。

<%-- message.jst --%>
<%@ tagAttribute name="messagetext" type="String" required="true"
rtexpr="true"%>
<%@ tagAttribute name="messagetype" type="String" required="true"
rtexpr="true"%>
<html>
<body>
<form>
<h1><%= messagetype %></h1>
<p><%= messagetext %></p>
<p>&nbsp;&nbsp;<INPUT TYPE="button" VALUE="Back"
onClick="history.back()">
</form>
</body>
</html>
<%
out.flush();
out.close();
%>

JSP

次のコードを拡張子 .jsp を持つページとしてアプリケーションのルートディレクトリに
保存します。

<%@ taglib prefix="t" uri="/" %>
<% 
  // userPassword 変数を設定していると想定します。
  if(userPassword.length() == 0) {
  // ページをテストするには、前の行をコメントに変え、
  // 次の行をコメントからコードに戻します。
  // if(0 == 0) {
%>
<t:message messagetype="Validation Error" messagetext="Enter 
password">
</t:message>
<% } %> 
...

本文コンテンツとの対話

このセクションでは、本文コンテンツと対話する JST の例を示します。

JST ページ

次のコードを Web アプリケーションのルートディレクトリに bodyinteract.jst として
保存します。

<%-- bodyinteract.jst --%>
<%-- 列挙のインポート --%>
<%@ page import="java.util.Enumeration" %>
<%-- 本文コンテンツを調べるには method="AFTER_BODY" を使用する必要があります。 --%>
<%@ tag method="AFTER_BODY" %>
<%-- また、本文コンテンツを調べるには、type="BUFFERED" または TYPE="LOOPING" 
     を使用する必要があります。 --%>
<%@ tag type="BUFFERED" %>
<% // 本文コンテンツを取得します。
  String body = bodyContent.getString();
  // 本文の長さを取得します。本文には、HTML 文字も含まれているので注意してください。
  int bclength = body.length();
  callerPageContext.getOut().print("<hr>HTML for body contains " + 
bclength + "characters.");
  // ループしないで、本文コンテンツを 1 回だけ調べてください。
  returnValue=SKIP_BODY; %>

JSP

次のコードを拡張子 .jsp を持つページとしてアプリケーションのルートディレクトリに
保存します。

<html>
<body>
<%@ taglib prefix="t" uri="/" %>
<%@ page import="java.util.*" %>
<h1>本文コンテンツとの対話</h1>
<t:bodyinteract>
 <hr>
 <p>First line
 <br>Second line
 <br>Third line
</t:bodyinteract>

</body>
</html>  

ループ

このセクションでは、ループを使用する JST ページの例を示します。

JST ページ

次のコードを Web アプリケーションのルートディレクトリに loop.jst として保存します。

<%-- loop.jst --%>
<%-- 列挙のインポート --%>
<%@ page import="java.util.Enumeration" %>
<%-- ループさせるには method="AFTER_BODY" を使用する必要があります。 --%>
<%@ tag method="AFTER_BODY" %>
<%-- ループさせるには type="BUFFERED" または TYPE="LOOPING" を使用する必要があり
ます。 --%>
<%@ tag type="LOOPING" %>
<%-- 渡されたオブジェクトの属性を宣言します。 --%>
<%@ tagAttribute name="thisEnum" type="Enumeration" required="true"
rtexpr="true"%>
<%@ tagAttribute name="var" type="String" required="true"
rtexpr="true"%>
<%-- スクリプト変数を定義します。id 属性は var 属性の値から
     スクリプト変数の名前を受け取ります。 --%>
<%@ tagVariable id="var" scope="NESTED" %>
<%
  if(thisEnum.hasMoreElements()) {
    // jst には独自の pageContext があるので、
    // callerPageContext を使用して呼び出し側 JSP 内で設定します。
    callerPageContext.setAttribute("header", thisEnum.nextElement());
    returnValue=EVAL_BODY_AGAIN; // ループ
  } else {
    returnValue=SKIP_BODY;
  }
%>
<%-- この例では、複数のメソッドの実装方法も示します。 
     JRun では以前のコードは doAfterBody メソッドに変換されます。
   この例では、doAfterBody に加えて実行する 
   doStartTag メソッドのコーディング方法を示します。 --%>
<%!  
public int doStartTag() throws JspException {
  if(thisEnum.hasMoreElements()) {
    // jst には独自の pageContext があるので、
  // callerPageContext.setAttribute を使用して呼び出し側 JSP 内で設定します。
    callerPageContext.setAttribute("header", thisEnum.nextElement());
    // Java ベースのメソッドでは、returnValue を設定する代わりに return を使用しま
す。
    return EVAL_BODY_TAG; // 本文テキストの使用を可能にします。
  } else {
    return SKIP_BODY;
  } 
}
%>

JSP

次のコードを拡張子 .jsp を持つページとしてアプリケーションのルートディレクトリに
保存します。

<%-- loop.jsp --%>
<html>
<body>
<%@ taglib prefix="t" uri="/" %>
<%@ page import="java.util.*" %>
<h1>ヘッダーのループ</h1>
<table border="1">
  <tr>
    <th>Name</th>
    <th>Value</th>
  </tr>
<t:loop var="header" thisEnum="<%= request.getHeaderNames() %>">
   <tr>
     <td><%= header %></td>
     <td><%= request.getHeader(header) %></td>
   </tr>
</t:loop>
</table>
</body>
</html>

スクリプト変数の使用

このセクションでは、JST でのスクリプト変数の使用例を示します。

JST ページ

次のコードを Web アプリケーションのルートディレクトリに scriptingvar.jst として
保存します。

<%-- scriptingvar.jst --%>
<%@ tagVariable name="myName" scope="AT_BEGIN" %>
<%-- 呼び出し側ページのコンテキストに値を保存します。 --%>        
<% callerPageContext.setAttribute("myName", "Christopher"); %>
<p><b>Inside the tag:</b> このタグは、myName スクリプト変数を設定します。
 これは、後で JSP の呼び出しに使用します。

JSP

次のページに拡張子 .jsp を付けてアプリケーションのルートディレクトリに保存します。

<html>
<body>
<%@ taglib prefix="t" uri="/" %>
<h1>スクリプト変数の使用</h1>
<p>Before the tag.
<t:scriptingvar/>
<p>After the tag.
<p> myName 変数はカスタムタグで設定されていましたが、scope="AT_BEGIN" となっている
ため、 ページの後半で利用可能になります。
<p>myName is <%= myName %>
</body>
</html>