Oracle Application Server Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス 10g(9.0.4) |
|
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実装によりサポートされている、タグ属性値を指定するためのOracle固有のBean参照構文と式構文について説明します。次の項目について説明します。
この機能にはOC4J JSPトランスレータが必要です。このトランスレータは他のJSPには移植できません。
Bean参照とは、JavaBeanインスタンス(Bean)への任意の参照であり、これによってBeanのプロパティまたはメソッドにアクセスします。Bean自身が他のBeanのプロパティである場合には、Beanのプロパティまたはメソッドへの参照も含まれます。
標準のJavaBeans構文では、直接参照するのではなくアクセッサ・メソッドをコールすることによってプロパティにアクセスすることになっているため、これは扱いが煩雑です。次のような直接参照を考えてみます。
a.b.c.d.doIt()
これは、標準のJavaBeans構文では次のように表されます。
a.getB().getC().getD().doIt()
しかし、OracleのコンパイルタイムJML実装では、次に説明するような省略形の構文を使用できます。
コンパイルタイム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の式構文は、標準JSPの式構文に前述したJML Bean参照構文のサポートを追加したスーパーセットです。
JMLの式の中で使用されるJML Bean参照は、次のような構文でカッコに入れる必要があります。
$[JML_bean_reference]
「JSPマークアップ言語(JML)タグの説明」のタグ属性の説明では、標準準拠の構文を示しています。その中で説明されているように、ランタイムとコンパイルタイムのどちらのJML実装でも、あるいはOracle以外のJSP環境でも属性を設定できます。
しかし、Oracle固有のコンパイルタイム実装のみを使用する場合は、前述の「JML Bean参照と式、コンパイル時の実装」で説明したように、JML Bean参照とJMLの式構文を使用して属性を設定することができます。次の要件に注意してください。
<%=...%>
の内部の$[...]
構文でJMLの式を使用できます。
JMLのuseVariable
タグを使用した例を考えてみます。ランタイム実装のために、次のような構文を使用します。
<jml:useVariable id = "isValidUser" type = "boolean" value = "<%= dbConn.isValid() %>" scope = "session" />
あるいは、コンパイルタイム実装のために次のような構文を使用することもできます(value
属性は文字列リテラルまたは式)。
<jml:useVariable id = "isValidUser" type = "boolean" value = "<%= $[dbConn.valid] %>" scope = "session" />
<%=...%>
構文内でネストせずに$[...]
構文でJMLの式を使用できます。
JMLのchoose...when
タグを使用した例を考えてみます。ランタイム実装のために、次のような構文を使用します(orderedItem
はJmlBoolean
のインスタンスであると仮定します)。
<jml:choose> <jml:when condition = "<%= orderedItem.getValue() %>" > You have changed your order: -- outputs the current order -- </jml:when> <jml:otherwise> Are you sure we can't interest you in something? </jml:otherwise> </jml:choose>
あるいは、コンパイルタイム実装のために次のような構文を使用することもできます(condition
属性は式のみ)。
<jml:choose> <jml:when condition = "$[orderedItem]" > You have changed your order: -- outputs the current order -- </jml:when> <jml:otherwise> Are you sure we can't interest you in something? </jml:otherwise> </jml:choose>
このセクションでは、次の項目を扱います。
taglib
ディレクティブの説明
ランタイム実装で現在もサポートされているタグについては、「JSPマークアップ言語(JML)タグの説明」を参照してください。
注意: ランタイム実装でサポートされないJMLタグには、ほとんどの場合、標準JSPに同等の機能のタグがあります。しかし、JSP 1.1以上の仕様に準拠しようとすると機能の実装が困難であるという理由でサポートされなかったコンパイルタイム・タグもあります。 |
OracleのコンパイルタイムJMLサポート実装では、カスタム・クラスOpenJspRegisterLib
を使用してJMLタグ・サポートを実装しています。
コンパイルタイム実装のJMLタグを使用するJSPページでは、taglib
ディレクティブでこのクラスの完全修飾名を指定する必要があります(標準JSPタグ・ライブラリの慣例のようにTLDファイルを指定しない)。
次に例を示します。
<%@ taglib uri="oracle.jsp.parse.OpenJspRegisterLib" prefix="jml" %>
JMLランタイム実装でのtaglib
の使用の詳細は、「JSPマークアップ言語(JML)タグ・ライブラリの概要」を参照してください。
ほとんどのJMLタグは、ランタイム・モデルでもコンパイルタイム・モデルでも使用できますが、表1に示すように、例外もあります。
このセクションでは、JMLコンパイルタイム実装ではまだサポートされており、JMLランタイム実装ではサポートされていないJMLタグを詳細に説明します。ランタイム実装でサポートされているタグについては、「JSPマークアップ言語(JML)タグの説明」を参照してください。
ここでは、コンパイルタイム専用の次のJMLタグについて説明します。
注意:
|
このタグでは、ページで使用するオブジェクトを宣言し、以前にインスタンス化されたオブジェクトがある場合には、指定したスコープでそれを名前で検索します。存在しない場合は、適切なクラスの新規インスタンスが作成され、指定したスコープに名前でアタッチされます。
構文とセマンティクスは、標準の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" />
このタグの機能は、標準のjsp:getProperty
タグと同じです。Beanプロパティの値をレスポンスに出力します。
getProperty
の使用方法に関する一般情報は、『Oracle Application Server Containers for J2EE JavaServer Pages開発者ガイド』、またはSun社のJavaServer Pages仕様バージョン1.2を参照してください。
<jml:getProperty name = "beanInstanceName" property = "propertyName" />
次の例では、salary
プロパティの現在の値を出力します。salary
はJmlNumber
型であると仮定します。
<jml:getProperty name="salary" property="value" />
これは、次の例と同じです。
<%= salary.getValue() %>
このタグは、標準の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 %>" ] />
name
(必須): プロパティを設定する対象のBeanの名前です。
property
(必須): 設定するプロパティの名前です。
value
: 値をリクエスト・パラメータからではなく直接設定できるオプションのパラメータです。JMLのsetProperty
は、値を指定する際に標準JSPの式だけでなく、JMLの式もサポートします。
次の例では、salary
に6%の昇給を加えて更新します。(salary
はJmlNumber
型であると仮定します。)
<jml:setProperty name="salary" property="value" value="<%= $[salary] * 1.06 %>" />
これは、次の例と同じです。
<% salary.setValue(salary.getValue() * 1.06); %>
このタグはBeanプロパティを設定するもう一つの手段であり、使用する構文はsetProperty
タグより使いやすくなっています。
<jml:set name = "beanInstanceName.propertyName" value = "stringLiteral" | "<%= jmlExpression %>" />
name
(必須): 設定されるBeanプロパティへの直接参照(JML Bean参照)です。
value
(必須): 新しいプロパティ値です。文字列リテラル、JMLの式または標準JSPの式として表されます。
次の各例では、salary
に6%の昇給を加えて更新します。(salary
はJmlNumber
型であると仮定します。)
<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); %>
このタグは、戻り値のないBeanメソッドをコールするメカニズムを提供します。
<jml:call method = "beanInstanceName.methodName(parameters)" />
method
(必須): スクリプトレットに記述するとおりのメソッドコールです。ただし、JMLの式$[... ]
の構文で囲めば、文のbeanInstancename.methodName
の部分はJML Bean参照として記述することができます。
次の例では、クライアントが別のページにリダイレクトされます。
<jml:call name='response.sendRedirect("http://www.oracle.com/")' />
これは、次の例と同じです。
<% response.sendRedirect("http://www.oracle.com/"); %>
このタグは、タグ・ボディの中で名前付きオブジェクトを使用する任意のコードに、その名前付きオブジェクトへの制御された同期アクセスを可能にします。
通常、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); } %>
このタグは、インクルード先のページ(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" />
このタグは、リクエストを他の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" />
このタグの機能は、標準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"' />
このタグの機能は、標準のjsp:plugin
タグと同じです。
plugin
の使用方法に関する一般情報は、『Oracle Application Server Containers for J2EE JavaServer Pages開発者ガイド』、またはSun社のJavaServer Pages仕様バージョン1.2を参照してください。