次のページをコーディングして、アプリケーションのルート ディレクトリにsimple.jst
として保存します。
<%-- simple.jst --%>
<p>Hello from the JRun Server Tag!</p>
次のページをコーディングし、アプリケーションのルート ディレクトリに、任意の名前を付けて保存します。URI="/"
によってルート ディレクトリ内のタグが検索されます。
<%@ taglib prefix="t" uri="/" %>
<t:simple/>
JST をテストするには、JSP ページをブラウザに表示します。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> <INPUT TYPE="button" VALUE="Back" onClick="history.back()"> </form> </body> </html> <% out.flush(); out.close(); %>
次の 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> <% } %> ...
<%-- 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; %>
<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>
<%-- 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; } } %>
<%-- 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>
<%-- 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.
<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>