サンプル

このセクションでは、次について説明します。

単純な例

JST ページ

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

<%-- simple.jst --%>
<p>Hello from the JRun Server Tag!</p>

JSP

次のページをコーディングし、アプリケーションのルート ディレクトリに、任意の名前を付けて保存します。URI="/" によってルート ディレクトリ内のタグが検索されます。

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

JST をテストするには、JSP ページをブラウザに表示します。JST ページのテキストが表示されます。

属性との対話

JST ページ

次の JST ページはエラー メッセージの表示に使用されます。前のページに戻るフォームと、2 つの属性が表示されます。

<%-- 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 では、message タグを呼び出しています。

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

本文コンテンツとの対話

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

<html>
<body>
<%@ taglib prefix="t" uri="/" %>
<%@ page import="java.util.*" %>
<h1>Interacting with Body Content</h1>
<t:bodyinteract>
 <hr>
 <p>First line
 <br>Second line
 <br>Third line
</t:bodyinteract>

</body>
</html>  

ループ

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_TAG; // ループ
  }
  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

<%-- loop.jsp --%>
<html>
<body>
<%@ taglib prefix="t" uri="/" %>
<%@ page import="java.util.*" %>
<h1>Looping through Headers</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 ページ

<%-- scriptingvar.jst --%>
<%@ tagVariable name="myName" scope="AT_BEGIN" %>

<%-- 呼び出し側ページのコンテキストに値を保存します。 --%>        
<% callerPageContext.setAttribute("myName", "Christopher"); %>

<p><b>Inside the tag:</b>This tag sets the 
myName scripting variable, which
is used later in the calling JSP.

JSP

<html>
<body>
<%@ taglib prefix="t" uri="/" %>
<h1>Using Scripting Variables</h1>
<p>Before the tag.

<t:scriptingvar/>

<p>After the tag.
<p>The myName variable was set in the custom tag but
because scope="AT_BEGIN", it is available later
in the page.
<p>myName is <%= myName %>

</body>
</html>