このセクションでは、JST の例をいくつか説明します。このセクションの例を使用する場合は、次のことを行う必要があります。
taglib
ディレクティブにある URI
属性の値には、スラッシュ (/
) を使用します。URI="/"
は、JRun が Web アプリケーションのルートディレクトリにあるタグを検索することを示しています。次のコードをアプリケーションのルートディレクトリに simple.jst として保存します。
<%-- simple.jst --%>
<p>JRun サーバのタグです。</p>
次のコードを拡張子 .jsp を持つページとしてアプリケーションのルートディレクトリに
保存します。
<%@ taglib prefix="t" uri="/" %>
<t:simple/>
このセクションでは、属性と対話する 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> <INPUT TYPE="button" VALUE="Back" onClick="history.back()"> </form> </body> </html> <% out.flush(); out.close(); %>
次のコードを拡張子 .jsp を持つページとしてアプリケーションのルートディレクトリに
保存します。
<%@ taglib prefix="t" uri="/" %>
<% // userPassword 変数を設定していると想定します。 if(userPassword.length() == 0) { // ページをテストするには、前の行をコメントに変え、 // 次の行をコメントからコードに戻します。 // if(0 == 0) { %> <t:message messagetype="Validation Error" messagetext="Enter password"> </t:message> <% } %> ...
このセクションでは、本文コンテンツと対話する 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 を持つページとしてアプリケーションのルートディレクトリに
保存します。
<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 ページの例を示します。
次のコードを 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 を持つページとしてアプリケーションのルートディレクトリに
保存します。
<%-- 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 でのスクリプト変数の使用例を示します。
次のコードを Web アプリケーションのルートディレクトリに scriptingvar.jst として
保存します。
<%-- scriptingvar.jst --%>
<%@ tagVariable name="myName" scope="AT_BEGIN" %> <%-- 呼び出し側ページのコンテキストに値を保存します。 --%> <% callerPageContext.setAttribute("myName", "Christopher"); %> <p><b>Inside the tag:</b> このタグは、myName スクリプト変数を設定します。 これは、後で 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>