Oracle Application Server Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス 10g(9.0.4) |
|
このトピックでは、Oracle JSPマークアップ言語(JML)タグ・ライブラリについて説明します。これは、開発者がJava文を使用せずにJSPページを記述できるJSPタグのセットを提供するライブラリです。JMLライブラリには、変数宣言、制御フロー、条件分岐、反復ループ、パラメータ設定およびオブジェクトコールのためのタグが用意されています。
このトピックの構成は、次のとおりです。
注意: ここで説明するライブラリは、標準のランタイム実装を使用しますが、Oracle独自のコンパイルタイム実装でもサポートされています。コンパイルタイム構文とタグの詳細は、「JMLコンパイルタイム構文とタグについて」を参照してください。ランタイム・タグのかわりにコンパイルタイム・タグを使用する場合の一般的な注意は、『Oracle Application Server Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。 |
OC4Jでは、JSP標準に従って開発されたJSPマークアップ言語(JML)タグ・ライブラリが提供されます。JMLタグは、他の標準タグ・ライブラリのタグと同様、通常のJSPスクリプトと完全に互換であり、任意のJSPページで使用できます。
JMLタグの目的は、Javaに慣れていないJSP開発者に対してコーディングの構文を単純化することにあります。JMLタグには、1)ロジック/フロー制御と、2)Beanバインドの2つのカテゴリがあります。
次の項目について説明します。
JMLタグを使用する場合は、次の要件に注意してください。
ojsputil.jar
ファイルがインストール済で、クラスパスに存在していることを確認してください。このファイルは、OC4Jのインストール時にインストールされます。
jml.tld
が、アプリケーションとともにデプロイされている必要があります。また、ライブラリを使用するJSPページには、適切なtaglib
ディレクティブが存在する必要があります。Oracle Application Serverのインストール時、TLDファイルは、予約済のタグ・ライブラリ・ディレクトリに置かれます。taglib
ディレクティブと予約済のタグ・ライブラリ・ディレクトリの詳細は、『Oracle Application Server Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。
JavaServer Pages標準タグ・ライブラリ(JSTL)と、すでにOC4Jが提供しているJMLカスタム・タグ・ライブラリには、重複する機能が含まれています。標準準拠で作業を進める場合は、原則として、カスタム・ライブラリではなく、JSTLの使用をお薦めします。「JavaServer Pages標準タグ・ライブラリのサポート」を参照してください。
ただし、既存のタグもサポート対象です。JSTLで使用できないカスタム・ライブラリの機能のうち、有効と判断される機能は、必要に応じて、将来JSTL標準に採用される予定です。
注意:
JavaServer Pagesのテクノロジは、次の2つの開発者コミュニティを対象としています。
JMLタグ・ライブラリは、Javaの知識をほとんど、あるいはまったく持たない大多数のWeb開発者でも、プログラムのフロー制御機能を完全に補完したJSPアプリケーションを構築できるように設計されています。
このモデルでは、ビジネス・ロジックを含むJavaBeansがJava開発者によって別個に開発されることを前提としています。
表1に示すように、JMLタグ・ライブラリの機能は2つのカテゴリに分類されます。
タグのカテゴリ | 機能 | タグ |
---|---|---|
Beanバインド・タグ |
指定したJSPのスコープでJavaBeanを宣言または宣言解除するためのタグです。「Beanバインド・タグの説明」を参照してください。 |
useVariable |
ロジック/フロー制御タグ |
反復ループや条件分岐などのコードフローの定義を単純化するためのタグです。「ロジックおよびフロー制御タグの説明」を参照してください。 |
if |
このセクションでは、現在のJSPランタイム実装でサポートされているJMLタグについて説明します。次のカテゴリに分かれています。
ここで説明するタグの一部を使用した初歩的なサンプルは、OC4Jのデモを参照してください。
注意:
|
このセクションでは、Beanバインド操作に使用する次のJMLタグについて説明します。
単純な変数を宣言するjsp:useBean
タグの代用になるタグです。
<jml:useVariable id = "beanInstanceName" [ scope = "page" | "request" | "session" | "application" ] type = "string" | "boolean" | "number" | "fpnumber" [ value = "stringLiteral" ] />
id
(必須): 宣言する変数の名前です。
scope
: 変数の有効期間またはスコープを定義します(jsp:useBean
タグと同様)。デフォルトのスコープは、page
です。
type
(必須): 変数の型を指定します。型の指定は、JmlString
、JmlBoolean
、JmlNumber
またはJmlFPNumber
です。
value
: 文字列リテラルまたは<%=... %>
構文で囲んだJSPの式として、宣言の中で変数を直接設定できます。この属性を指定しない場合、値はそれ以前に設定したときと同じまま(変数が存在する場合)か、あるいはデフォルト値で初期化されます。指定した場合、この宣言がオブジェクトをインスタンス化するか、単に名前付きのスコープからオブジェクトを取得するかにかかわらず、常に値が設定されます。
次に例を示します。
<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 id = "beanInstanceName" [ scope = "page" | "request" | "session" | "application" ] [ type = "string" | "boolean" | "number" | "fpnumber" ] param = "requestParameterName" />
id
(必須): 宣言または参照する変数の名前です。
scope
: 変数の有効期間またはスコープを定義します(jsp:useBean
タグと同様)。デフォルトはpage
です。
type
: 変数の型を指定します。型の指定は、JmlString
、JmlBoolean
、JmlNumber
またはJmlFPNumber
です。デフォルトはstring
です。
param
(必須): 変数の設定に使用される値を持つリクエスト・パラメータを指定します。リクエスト・パラメータが存在する場合、この宣言で変数が実体化するかどうかにかかわらず、常に変数値が更新されます。リクエスト・パラメータが存在しない場合、変数値は一定のままです。
次の例では、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" />
変数を宣言し、Cookieに含まれる値をその変数に設定するための簡単な構文を提供します。
<jml:useCookie id = "beanInstanceName" [ scope = "page" | "request" | "session" | "application" ] [ type = "string" | "boolean" | "number" | "fpnumber" ] cookie = "cookieName" />
id
(必須): 宣言または参照する変数の名前です。
scope
: 変数の有効期間またはスコープを定義します。この属性はオプションで、デフォルトはpage
です。
type
: 変数の型を指定します。型の指定は、JmlString
、JmlBoolean
、JmlNumber
またはJmlFPNumber
です。デフォルトはstring
です。
cookie
(必須): この変数の設定に使用される値を持つCookieの名前を指定します。Cookieが存在する場合、この宣言で変数が実体化するかどうかにかかわらず、常に変数値が更新されます。Cookieが存在しない場合、変数値は一定のままです。
次の例では、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; } } %>
オブジェクトを(通常はBean)を、そのスコープから削除します。
<jml:remove id = "beanInstanceName" [ scope = "page" | "request" | "session" | "application" ] />
id
(必須): 削除するBeanの名前を指定します。
scope
: 削除するBeanのスコープを指定します。指定しない場合、1)page
、2)request
、3)session
、4)application
の順でスコープが検索されます。id
に一致する最初のオブジェクトが削除されます。
次の例では、セッションuser
が削除されます。
<jml:remove id = "user" scope = "session" />
これは、次の例と同じです。
<% session.removeValue("user"); %>
このセクションでは、ロジックおよびフロー制御に使用する次のJMLタグについて説明します。
これらのタグはJavaの経験があまりない開発者向けのものであり、反復ループや条件分岐など、Javaのロジック制御およびフロー制御構文のかわりに使用することができます。
1つの条件文を評価するタグです。条件がtrueの場合、if
タグのボディが実行されます。
<jml:if condition = "<%= jspExpression %>" > ...body of if tag (executed if the condition is true)... </jml:if>
次のE-Commerceの例では、ユーザーのショッピング・カートの情報を表示します。このコードは、現在のTシャツの注文を保持する変数が空かどうかをチェックします。空でない場合、ユーザーが注文したサイズが表示されます。currTS
はJmlString
型であると仮定します。
<jml:if condition = "<%= !currTS.isEmpty() %>" > <S>(size: <%= currTS.getValue().toUpperCase() %>)</S>  </jml:if>
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の例では、ユーザーのショッピング・カートの情報を表示します。このコードは、注文があるかどうかをチェックします。注文がある場合は現在の注文が表示され、注文がない場合はショッピングを続行するかどうかを確認されます。(この例では、現在の注文を表示するコードは省略されています。)orderedItem
はJmlBoolean
型であると仮定します。
<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>
このタグを使用すると、Javaのfor
ループと同じように、ループ内を反復することができます。
id
属性はjava.lang.Integer
型のローカル・ループ変数で、その値が現在の範囲要素です。範囲はfrom
属性で示される値で始まり、to
属性で示される値を超えるまで、ループのボディが実行されるたびに1ずつ増分されます。
範囲の反復が終わると、for
の終了タグに続く最初の文に制御が移ります。
<jml:for id = "loopVariable" from = "<%= jspExpression %>" to = "<%= jspExpression %>" > ...body of for tag (executed once at each value of range, inclusive)... </jml:for>
id
(必須): 範囲内の現在の値を保持するループ変数の名前です。これはjava.lang.Integer
型の値で、タグのボディ内でのみ使用できます。
from
(必須): 範囲の開始を指定します。Javaのint
値に評価される必要のある式です。
to
(必須): 範囲の終了を指定します。Javaのint
値に評価される必要のある式です。
次の例では、段階的に大きくなる見出しスタイル(H1、H2、H3、H4、H5)で「Hello World」を繰り返し出力します。
<jml:for id="i" from="<%= 1 %>" to="<%= 5 %>" > <H<%=i%>> Hello World! </H<%=i%>> </jml:for>
このタグを使用すると、同種の値のセットにわたって反復することができます。
タグのボディは、値セットの各要素ごとに実行されます。値セットが空の場合、ボディは実行されません。
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>
id
(必須): 反復の各ステップで現在の要素の値を保持するループ変数の名前です。タグのボディ内でのみ使用できます。型はtype
属性で指定する型と同じです。
in
(必須): Javaの配列、Enumeration
オブジェクトまたはVector
オブジェクトに評価されるJSPの式を指定します。
limit
(必須): Javaのint
値に評価されるJSPの式で、セットの要素数とは無関係に反復の最大数を定義します。
type
(必須): ループ変数の型を指定します。セット要素の型と一致する必要があります。
次の例では、リクエスト・パラメータを反復します。
<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:if condition="<%= timer.isExpired() %>" > You did not complete in time! <jml:return /> </jml:if>
ページ・バッファの現在の内容をクライアントに返します。これはページがバッファされている場合のみ有効で、それ以外では効果はありません。
<jml:flush />
なし。
次の例では、負荷の高い操作を実行する前に現在のページ内容をフラッシュします。
<jml:flush /> <% myBean.expensiveOperation(out); %>