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

JMLコンパイルタイム構文とタグについて

JSP 1.1仕様が実装されるより前のリリースのOracle JSPでは、Oracle固有の拡張としてのみJMLタグがサポートされていました。タグ・ライブラリのフレームワークは、Sun社のJavaServer Pages仕様バージョン1.1で追加されました。1.1より前のリリースでは、JMLタグの処理はJSPトランスレータに組み込まれていました。このリファレンスでは、これをコンパイルタイム・タグ・サポートと呼びます。

OC4Jで提供されるJSPでは、コンパイルタイムJML実装も引き続きサポートされますが、可能なかぎり標準準拠のランタイム実装を使用することをお薦めします。ランタイム実装については、「JSPマークアップ言語タグについて」を参照してください。

このトピックでは、コンパイルタイム実装の機能のうち、ランタイム実装と異なるものについて説明します。次の項目が含まれます。

コンパイルタイム実装を利用する方が便利な場合の一般的な説明は、『Oracle Application Server Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。

JMLコンパイルタイム構文のサポート

このセクションでは、コンパイルタイムJML実装によりサポートされている、タグ属性値を指定するためのOracle固有のBean参照構文と式構文について説明します。次の項目について説明します。

この機能にはOC4J JSPトランスレータが必要です。このトランスレータは他のJSPには移植できません。

JML Bean参照と式、コンパイルタイム実装

Bean参照とは、JavaBeanインスタンス(Bean)への任意の参照であり、これによってBeanのプロパティまたはメソッドにアクセスします。Bean自身が他のBeanのプロパティである場合には、Beanのプロパティまたはメソッドへの参照も含まれます。

標準のJavaBeans構文では、直接参照するのではなくアクセッサ・メソッドをコールすることによってプロパティにアクセスすることになっているため、これは扱いが煩雑です。次のような直接参照を考えてみます。


a.b.c.d.doIt()

これは、標準のJavaBeans構文では次のように表されます。


a.getB().getC().getD().doIt()

しかし、OracleのコンパイルタイムJML実装では、次に説明するような省略形の構文を使用できます。

JML Bean参照

コンパイルタイムJML実装によりサポートされているOracle固有の構文では、ドット(.)による直接表記を使用してBean参照を表すことができます。ただし、標準のBeanプロパティ・アクセッサ・メソッドも使用できることに注意してください。

次の標準のJavaBean参照を考えてみます。


customer.getName()

JML Bean参照の構文では、これを次の2つの方法で表すことができます。


customer.getName()

または


customer.name

JavaBeansでは、オプションでデフォルト・プロパティを指定できます。参照が明示的に記述されていない場合にその参照が使用されます。JML Bean参照ではデフォルト・プロパティを省略可能です。上の例で、nameがデフォルト・プロパティであるとすれば、次のいずれもJML Bean参照として有効です。


customer.getName()

または


customer.name

または


customer

ほとんどのJavaBeansではデフォルト・プロパティを定義しません。定義する場合、最も重要なのはJMLデータ型のJavaBeansです(「拡張型のJavaBeans」を参照)。

JMLの式

コンパイルタイムJML実装によりサポートされているJMLの式構文は、標準JSPの式構文に前述したJML Bean参照構文のサポートを追加したスーパーセットです。

JMLの式の中で使用されるJML Bean参照は、次のような構文でカッコに入れる必要があります。


$[JML_bean_reference]

JMLの式を使用する属性設定

「JSPマークアップ言語(JML)タグの説明」のタグ属性の説明では、標準準拠の構文を示しています。その中で説明されているように、ランタイムとコンパイルタイムのどちらのJML実装でも、あるいはOracle以外のJSP環境でも属性を設定できます。

しかし、Oracle固有のコンパイルタイム実装のみを使用する場合は、前述の「JML Bean参照と式、コンパイル時の実装」で説明したように、JML Bean参照とJMLの式構文を使用して属性を設定することができます。次の要件に注意してください。

JMLコンパイルタイム・タグ・サポート

このセクションでは、次の項目を扱います。


注意:

ランタイム実装でサポートされないJMLタグには、ほとんどの場合、標準JSPに同等の機能のタグがあります。しかし、JSP 1.1以上の仕様に準拠しようとすると機能の実装が困難であるという理由でサポートされなかったコンパイルタイム・タグもあります。


コンパイルタイムJMLサポートのtaglibディレクティブ

OracleのコンパイルタイムJMLサポート実装では、カスタム・クラスOpenJspRegisterLibを使用してJMLタグ・サポートを実装しています。

コンパイルタイム実装のJMLタグを使用するJSPページでは、taglibディレクティブでこのクラスの完全修飾名を指定する必要があります(標準JSPタグ・ライブラリの慣例のようにTLDファイルを指定しない)。

次に例を示します。


<%@ taglib uri="oracle.jsp.parse.OpenJspRegisterLib" prefix="jml" %>

JMLランタイム実装でのtaglibの使用の詳細は、「JSPマークアップ言語(JML)タグ・ライブラリの概要」を参照してください。

JMLタグのサマリー、コンパイルタイムとランタイムの比較

ほとんどのJMLタグは、ランタイム・モデルでもコンパイルタイム・モデルでも使用できますが、表1に示すように、例外もあります。

表1 サポートされているJMLタグ: コンパイルタイム・モデルとランタイム・モデルの比較 
タグ Oracleのコンパイルタイム実装でサポート Oracleのランタイム実装でサポート

Beanバインド・タグ:

 

 

useBean

はい

いいえ(jsp:useBeanを使用)

useVariable

はい

はい

useForm

はい

はい

useCookie

はい

はい

remove

はい

はい

Beanマッピング・タグ:

 

 

getProperty

はい

いいえ(jsp:getPropertyを使用)

setProperty

はい

いいえ(jsp:setPropertyを使用)

set

はい

いいえ

call

はい

いいえ

lock

はい

いいえ

制御フロータグ:

 

 

if

はい

はい

choose

はい

はい

for

はい

はい

foreach

はい(type属性はオプション)

はい(type属性が必須)

return

はい

はい

flush

はい

はい

include

はい

いいえ(jsp:includeを使用)

forward

はい

いいえ(jsp:forwardを使用)

XMLタグ:

 

 

transform

非推奨

はい

styleSheet

非推奨

はい

ユーティリティ・タグ:

 

 

print

はい(文字列リテラルを指定する場合は二重引用符を使用)

いいえ(JSPの式を使用)

plugin

はい

いいえ(jsp:pluginを使用)


注意:

Oracle9iASリリース2(9.0.3)の場合、transformタグおよびstyleSheetタグは、コンパイルタイム実装では非推奨です。


追加のJMLタグとコンパイルタイム実装の説明

このセクションでは、JMLコンパイルタイム実装ではまだサポートされており、JMLランタイム実装ではサポートされていないJMLタグを詳細に説明します。ランタイム実装でサポートされているタグについては、「JSPマークアップ言語(JML)タグの説明」を参照してください。

ここでは、コンパイルタイム専用の次のJMLタグについて説明します。


注意:

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

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


JML useBeanタグ

このタグでは、ページで使用するオブジェクトを宣言し、以前にインスタンス化されたオブジェクトがある場合には、指定したスコープでそれを名前で検索します。存在しない場合は、適切なクラスの新規インスタンスが作成され、指定したスコープに名前でアタッチされます。

構文とセマンティクスは、標準のjsp:useBeanタグと同じですが、jsp:useBeanでJSPの式が有効な場合、JML useBeanではJMLの式かJSPの式かどちらかが常に有効です。jsp:useBeanタグの概要は、『Oracle Application Server Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。

構文


<jml:useBean id = "beanInstanceName"
[ scope ="page" | "request" | "session" | "application" ]
  class ="package.class" |
  type = "package.class" |
  class ="package.class" type = "package.class" |
  beanName = "package.class" | "<%= jmlExpression %>" type = "package.class"  />

setPropertyタグなどのネストされたタグを追加して、</jml:useBean>の終了タグを使用することもできます。

属性

jsp:useBeanの属性と構文の詳細は、Sun社のJavaServer Pages仕様バージョン1.2を参照してください。


<jml:useBean id = "isValidUser" class = "oracle.jsp.jml.JmlBoolean" scope = "session" />

JML getPropertyタグ

このタグの機能は、標準のjsp:getPropertyタグと同じです。Beanプロパティの値をレスポンスに出力します。

getPropertyの使用方法に関する一般情報は、『Oracle Application Server Containers for J2EE JavaServer Pages開発者ガイド』、またはSun社のJavaServer Pages仕様バージョン1.2を参照してください。

構文


<jml:getProperty name = "beanInstanceName"
                 property = "propertyName" />

属性

次の例では、salaryプロパティの現在の値を出力します。salaryJmlNumber型であると仮定します。


<jml:getProperty name="salary" property="value" />

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


<%= salary.getValue() %>

JML setPropertyタグ

このタグは、標準のjsp:setPropertyタグでサポートされる機能を持ちますが、JMLの式をサポートする機能も追加されています。特に、JML Bean参照を使用できます。

setPropertyの使用方法に関する一般情報は、『Oracle Application Server Containers for J2EE JavaServer Pages開発者ガイド』、またはSun社のJavaServer Pages仕様バージョン1.2を参照してください。

構文


<jml:setProperty name = "beanInstanceName"
                 property = " * " |
                 property = "propertyName" [ param = "parameterName" ] |
                 property = "propertyName"
               [ value = "stringLiteral" | "<%= jmlExpression %>" ] />

属性

次の例では、salaryに6%の昇給を加えて更新します。(salaryJmlNumber型であると仮定します。)


<jml:setProperty name="salary" property="value" value="<%= $[salary] * 1.06 %>" />

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


<% salary.setValue(salary.getValue() * 1.06); %>

JML setタグ

このタグはBeanプロパティを設定するもう一つの手段であり、使用する構文はsetPropertyタグより使いやすくなっています。

構文


<jml:set name = "beanInstanceName.propertyName"
         value = "stringLiteral" | "<%= jmlExpression %>" />

属性

次の各例では、salaryに6%の昇給を加えて更新します。(salaryJmlNumber型であると仮定します。)


<jml:set name="salary.value" value="<%= salary.getValue() * 1.06 %>" />

または


<jml:set name="salary.value" value="<%= $[salary.value] * 1.06 %>" />

または


<jml:set name="salary" value="<%= $[salary] * 1.06 %>" />

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


<% salary.setValue(salary.getValue() * 1.06); %>

JML callタグ

このタグは、戻り値のないBeanメソッドをコールするメカニズムを提供します。

構文


<jml:call method = "beanInstanceName.methodName(parameters)" />

属性

次の例では、クライアントが別のページにリダイレクトされます。


<jml:call name='response.sendRedirect("http://www.oracle.com/")' />

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


<% response.sendRedirect("http://www.oracle.com/"); %>

JML lockタグ

このタグは、タグ・ボディの中で名前付きオブジェクトを使用する任意のコードに、その名前付きオブジェクトへの制御された同期アクセスを可能にします。

通常、JSP開発者が並行性の問題を考慮する必要はありません。ただし、アプリケーション・スコープ・オブジェクトはアプリケーションを実行している全ユーザーで共有されるため、重要なデータへのアクセスには制御と調整が必要です。

JML lockタグを使用すると、異なるユーザーによる同時更新を防ぐことができます。

構文


<jml:lock name = "beanInstanceName" >
   ...body...
</jml:lock>

属性

次の例では、pageCountがアプリケーション・スコープのJmlNumber値です。このコードが現在の値を取得してから新しい値を設定するまでの間、他のユーザーによって値が更新されないように、変数がロックされます。


<jml:lock name="pageCount" >
    <jml:set name="pageCount.value" value="<%= pageCount.getValue() + 1 %>" />
</jml:lock>

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


<% synchronized(pageCount)
   {
      pageCount.setValue(pageCount.getValue() + 1);
   }
%>

JML includeタグ

このタグは、インクルード先のページ(includeを呼び出すページ)に対応して他のJSPタグ、サーブレットまたはHTMLページの出力をインクルードします。機能は標準のjsp:includeタグと同じですが、page属性をJMLの式として表すことができる点が異なります。

includeの使用方法に関する一般情報は、『Oracle Application Server Containers for J2EE JavaServer Pages開発者ガイド』、またはSun社のJavaServer Pages仕様バージョン1.2を参照してください。

構文


<jml:include page = "relativeURL" | "<%= jmlExpression %>"
             flush = "true" | "false" />

属性

includeの属性と構文の詳細は、Sun社のJavaServer Pages仕様バージョン1.2を参照してください。

次の例では、table.jspの出力をインクルードします。これは、問合せ文字列とリクエスト属性のデータに基づいてHTML表をレンダリングするプレゼンテーション・コンポーネントです。


<jml:include page="table.jsp?maxRows=10" flush="true" />

JML forwardタグ

このタグは、リクエストを他のJSPページ、サーブレットまたはHTMLページにフォワードします。機能は標準のjsp:forwardタグと同じですが、page属性をJMLの式として表すことができる点が異なります。

forwardの使用方法に関する一般情報は、『Oracle Application Server Containers for J2EE JavaServer Pages開発者ガイド』、またはSun社のJavaServer Pages仕様バージョン1.2を参照してください。

構文


<jml:forward page = "relativeURL" | "<%= jmlExpression %>" />

属性

forwardの属性と構文の詳細は、Sun社のJavaServer Pages仕様バージョン1.2を参照してください。


<jml:forward page="altpage.jsp" />

JML printタグ

このタグの機能は、標準JSPの式と基本的に同じです。<%= expr %>. 指定されたJMLの式または文字列リテラルが評価され、結果がレスポンスに出力されます。このタグでは、JMLの式を<%= ... %>構文で囲む必要はありませんが、文字列リテラルは二重引用符で囲む必要があります。

構文


<jml:print eval = '"stringLiteral"' | "jmlExpression" />

属性

次の例のどちらでも、salaryの現在の値を出力します。型はJmlNumberです。


<jml:print eval="$[salary]" />

または


<jml:print eval="salary.getValue()" />

次の例では、文字列リテラルを出力します。


<jml:print eval='"Your string here"' />

JML pluginタグ

このタグの機能は、標準のjsp:pluginタグと同じです。

pluginの使用方法に関する一般情報は、『Oracle Application Server Containers for J2EE JavaServer Pages開発者ガイド』、またはSun社のJavaServer Pages仕様バージョン1.2を参照してください。