Oracle Application Server Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス
10g(9.0.4)
       

JSPタグについて

このトピックでは、Oracle JSPマークアップ言語(JML)タグ・ライブラリについて説明します。これは、開発者がJava文を使用せずにJSPページを記述できるJSPタグのセットを提供するライブラリです。JMLライブラリには、変数宣言、制御フロー、条件分岐、反復ループ、パラメータ設定およびオブジェクトコールのためのタグが用意されています。

このトピックの構成は、次のとおりです。


注意:

ここで説明するライブラリは、標準のランタイム実装を使用しますが、Oracle独自のコンパイルタイム実装でもサポートされています。コンパイルタイム構文とタグの詳細は、「JMLコンパイルタイム構文とタグについて」を参照してください。ランタイム・タグのかわりにコンパイルタイム・タグを使用する場合の一般的な注意は、『Oracle Application Server Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。


JSPマークアップ言語(JML)タグ・ライブラリの概要

OC4Jでは、JSP標準に従って開発されたJSPマークアップ言語(JML)タグ・ライブラリが提供されます。JMLタグは、他の標準タグ・ライブラリのタグと同様、通常のJSPスクリプトと完全に互換であり、任意のJSPページで使用できます。

JMLタグの目的は、Javaに慣れていないJSP開発者に対してコーディングの構文を単純化することにあります。JMLタグには、1)ロジック/フロー制御と、2)Beanバインドの2つのカテゴリがあります。

次の項目について説明します。

JMLタグを使用する場合は、次の要件に注意してください。

JMLタグ・ライブラリの概念

JavaServer Pagesのテクノロジは、次の2つの開発者コミュニティを対象としています。

JMLタグ・ライブラリは、Javaの知識をほとんど、あるいはまったく持たない大多数のWeb開発者でも、プログラムのフロー制御機能を完全に補完したJSPアプリケーションを構築できるように設計されています。

このモデルでは、ビジネス・ロジックを含むJavaBeansがJava開発者によって別個に開発されることを前提としています。

JMLタグのカテゴリ

表1に示すように、JMLタグ・ライブラリの機能は2つのカテゴリに分類されます。

表1 JMLタグの機能カテゴリ
タグのカテゴリ 機能 タグ

Beanバインド・タグ

指定したJSPのスコープでJavaBeanを宣言または宣言解除するためのタグです。「Beanバインド・タグの説明」を参照してください。

useVariable
useForm
useCookie
remove

ロジック/フロー制御タグ

反復ループや条件分岐などのコードフローの定義を単純化するためのタグです。「ロジックおよびフロー制御タグの説明」を参照してください。

if
choose..when..[otherwise]
foreach
return
flush

JSPマークアップ言語(JML)タグの説明

このセクションでは、現在のJSPランタイム実装でサポートされているJMLタグについて説明します。次のカテゴリに分かれています。

ここで説明するタグの一部を使用した初歩的なサンプルは、OC4Jのデモを参照してください。


注意:

  • このタグ構文では、接頭辞「jml:」が使用されます。慣例的にこのように表記しますが、必須ではありません。任意の接頭辞をtaglibディレクティブに指定できます。

  • このヘルプのタグ構文規則の詳細は、「タグ構文の表記と意味」を参照してください。


Beanバインド・タグの説明

このセクションでは、Beanバインド操作に使用する次のJMLタグについて説明します。

JML useVariableタグ

単純な変数を宣言するjsp:useBeanタグの代用になるタグです。

構文


<jml:useVariable id = "beanInstanceName"
             [ scope = "page" | "request" | "session" | "application" ]
               type = "string" | "boolean" | "number" | "fpnumber"
             [ value = "stringLiteral" ] />
属性

次に例を示します。


<jml:useVariable id = "isValidUser" type = "boolean" value = "<%= dbConn.isValid() %>" scope = "session" />


これは、次の例と同じです。


<jsp:useBean id = "isValidUser" class = "oracle.jsp.jml.JmlBoolean" scope = "session" />
<jsp:setProperty name="isValidUser" property="value" value = "<%= dbConn.isValid() %>" />


JML useFormタグ

変数を宣言し、リクエストから渡された値をその変数に設定するための簡単な構文を提供します。

構文


<jml:useForm id = "beanInstanceName"
           [ scope = "page" | "request" | "session" | "application" ]
           [ type = "string" | "boolean" | "number" | "fpnumber" ]
             param = "requestParameterName" />
属性

次の例では、string型のuserという名前のセッション変数に、userという名前のリクエスト・パラメータの値を設定します。


<jml:useForm id = "user" type = "string" param = "user" scope = "session" />

これは、次の例と同じです。


<jsp:useBean id = "user" class = "oracle.jsp.jml.JmlString" scope = "session" />
<jsp:setProperty name="user" property="value" param = "user" />

JML useCookieタグ

変数を宣言し、Cookieに含まれる値をその変数に設定するための簡単な構文を提供します。

構文


<jml:useCookie id = "beanInstanceName"
             [ scope = "page" | "request" | "session" | "application" ]
             [ type = "string" | "boolean" | "number" | "fpnumber" ]
               cookie = "cookieName" />
属性

次の例では、string型のuserという名前のリクエスト変数に、userという名前のCookieの値を設定します。


<jml:useCookie id = "user" type = "string" cookie = "user" scope = "request" />

これは、次の例と同じです。


<jsp:useBean id = "user" class = "oracle.jsp.jml.JmlString" scope = "request" />
<%
     Cookies [] cookies = request.getCookies();
     for (int i = 0; i < cookies.length; i++) {
             if (cookies[i].getName().equals("user")) {
                     user.setValue(cookies[i].getValue());
                     break;
             }
     }
%>

JML removeタグ

オブジェクトを(通常はBean)を、そのスコープから削除します。

構文


<jml:remove id = "beanInstanceName"
          [ scope = "page" | "request" | "session" | "application" ] />
属性

次の例では、セッションuserが削除されます。


<jml:remove id = "user" scope = "session" />

これは、次の例と同じです。


<% session.removeValue("user"); %>

ロジックおよびフロー制御タグの説明

このセクションでは、ロジックおよびフロー制御に使用する次のJMLタグについて説明します。

これらのタグはJavaの経験があまりない開発者向けのものであり、反復ループや条件分岐など、Javaのロジック制御およびフロー制御構文のかわりに使用することができます。

JML ifタグ

1つの条件文を評価するタグです。条件がtrueの場合、ifタグのボディが実行されます。

構文


<jml:if condition = "<%= jspExpression %>" >
     ...body of if tag (executed if the condition is true)...
</jml:if>

属性

次のE-Commerceの例では、ユーザーのショッピング・カートの情報を表示します。このコードは、現在のTシャツの注文を保持する変数が空かどうかをチェックします。空でない場合、ユーザーが注文したサイズが表示されます。currTSJmlString型であると仮定します。


<jml:if condition = "<%= !currTS.isEmpty() %>" >
     <S>(size: <%= currTS.getValue().toUpperCase() %>)</S>&nbsp
</jml:if>

JML choose...when...[otherwise]タグ

chooseタグをwhenおよびotherwiseタグと組み合せると、複数の条件式を指定できます。

chooseタグのボディ内に1つ以上のwhenタグを記述し、それぞれのwhenタグで条件を指定します。whenの条件が最初にtrueになったところで、そのwhenタグのボディが実行されます。(複数のwhenボディが実行されることはありません。)

when条件のどれもtrueでない場合、オプションのotherwiseタグが指定されていれば、otherwiseタグのボディが実行されます。

構文


<jml:choose>
    <jml:when condition = "<%= jspExpression %>" >
        ...body of 1st when tag (executed if the condition is true)...
    </jml:when>
    ...
    [...optional additional when tags...]
    [ <jml:otherwise>
        ...body of otherwise tag (executed if all when conditions false)...
    </jml:otherwise> ]
</jml:choose>

属性

whenタグでは、次の属性を使用します。

chooseおよびotherwiseタグには属性はありません。

次のE-Commerceの例では、ユーザーのショッピング・カートの情報を表示します。このコードは、注文があるかどうかをチェックします。注文がある場合は現在の注文が表示され、注文がない場合はショッピングを続行するかどうかを確認されます。(この例では、現在の注文を表示するコードは省略されています。)orderedItemJmlBoolean型であると仮定します。


<jml:choose>
     <jml:when condition = "<%= orderedItem.getValue() %>"  >
          You have changed your order:
             -- output the current order --
     </jml:when>
     <jml:otherwise>
          Are you sure we can't interest you in something, cheapskate?
     </jml:otherwise>
</jml:choose>

JML forタグ

このタグを使用すると、Javaのforループと同じように、ループ内を反復することができます。

id属性はjava.lang.Integer型のローカル・ループ変数で、その値が現在の範囲要素です。範囲はfrom属性で示される値で始まり、to属性で示される値を超えるまで、ループのボディが実行されるたびに1ずつ増分されます。

範囲の反復が終わると、forの終了タグに続く最初の文に制御が移ります。


注意:

降順の範囲はサポートされていません。fromの値は、toの値以下にしてください。


構文


<jml:for id = "loopVariable"
         from = "<%= jspExpression %>"
         to = "<%= jspExpression %>" >
      ...body of for tag (executed once at each value of range, inclusive)...
</jml:for>

属性

次の例では、段階的に大きくなる見出しスタイル(H1、H2、H3、H4、H5)で「Hello World」を繰り返し出力します。


<jml:for id="i" from="<%= 1 %>" to="<%= 5 %>" >
     <H<%=i%>>
            Hello World!
     </H<%=i%>>
</jml:for>

JML foreachタグ

このタグを使用すると、同種の値のセットにわたって反復することができます。

タグのボディは、値セットの各要素ごとに実行されます。値セットが空の場合、ボディは実行されません。

id属性は、現在のセット要素を値として保持するローカル・ループ変数です。型はtype属性で指定します。(指定した型とセット要素の型は一致する必要があります。)

現在このタグで反復がサポートされているのは、次のタイプのデータ構造です。

構文


<jml:foreach id = "loopVariable"
             in = "<%= jspExpression %>"
             limit = "<%= jspExpression %>"
             type = "package.class" >
    ...body of foreach tag (executes once for each element in data structure)...
</jml:foreach>

属性

次の例では、リクエスト・パラメータを反復します。


<jml:foreach id="name" in="<%= request.getParameterNames() %>" type="java.lang.String" >
    Parameter: <%= name %>
    Value: <%= request.getParameter(name) %> <br>
</jml:foreach>

または、複数の値を持つパラメータを扱う場合は次のようにします。


<jml:foreach id="name" in="<%= request.getParameterNames() %>" type="java.lang.String" >
    Parameter: <%= name %>
    Value: <jml:foreach id="val" in="<%=request.getParameterValues(name)%>"
                       type="java.lang.String" >
                <%= val %> :
           </jml:foreach>
    <br>
</jml:foreach>

JML returnタグ

このタグに達すると、それ以上処理せずに実行がページから戻ります。

構文


<jml:return />

属性

なし。

次の例では、タイマーが時間切れになると処理せずにページが返されます。


<jml:if condition="<%= timer.isExpired() %>" >
     You did not complete in time!
     <jml:return />
</jml:if>

JML flushタグ

ページ・バッファの現在の内容をクライアントに返します。これはページがバッファされている場合のみ有効で、それ以外では効果はありません。

構文


<jml:flush />

属性

なし。

次の例では、負荷の高い操作を実行する前に現在のページ内容をフラッシュします。


<jml:flush />
<% myBean.expensiveOperation(out); %>