Oracle® Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド 11g リリース2(11.1.2.3.0) B69399-02 |
|
![]() 前 |
![]() 次 |
この章では、ADFアプリケーション・モジュールのデータ・モデルおよびビジネス・サービス・インタフェース・メソッドが、設計時にデータバインディングのドラッグ・アンド・ドロップ用にどのように表示されるか、実行時にアプリケーション・モジュールのデータ・コントロールを使用してADF Modelデータバインディング・レイヤーからどのようにアクセスできるか、および開発者がどのように「データ・コントロール」パネルを使用してデータバインドされたページを作成するかについて説明します。
この章の内容は次のとおりです。
ADFモデルによって、ユーザー・インタフェース・テクノロジとビジネス・サービス実装の分離を可能にする概念(データ・コントロールと宣言的バインディング)が実装されます。
データ・コントロールでは、関連するプロパティ、メソッド、タイプの情報を含め、サービスの操作とデータ・コレクションを表す標準のメタデータ・インタフェースを使用してビジネス・サービスの実装技術を抽象化します。ビジネス・コンポーネントを使用するアプリケーションでは、アプリケーション・モジュール作成時に自動的にデータ・コントロールが作成され、データ・コントロールにはアプリケーション・モジュールの全機能が含まれます。開発者は、JDeveloperの「データ・コントロール」パネルに表示されたデータ・コントロールの表現を使用して、アプリケーション・モジュールに自動的にバインドされるUIコンポーネントを作成できます。実行時に、ADFモデル・レイヤーによって、適切なXMLファイルからデータ・コントロールおよびバインディングを記述した情報が読み取られ、ユーザー・インタフェースとビジネス・サービスの双方向の結合が実装されます。
宣言的なバインディングによって、データ・コントロール内のデータ・コレクションからのデータ・アクセスの詳細と、その操作の実行が抽象化されます。宣言的なバインディング・オブジェクトには、次の3つの基本的な種類があります。
実行可能バインディング: 実行可能バインディングには、イテレータ・バインディングなどが含まれ、データ・コレクションのスクロール処理とページング、および概要情報から詳細情報へのドリルダウンを可能にするユーザー・インタフェースを容易に作成できます。また、実行可能バインディングには、ページ内で一連のページの検索およびネストを可能にするバインディングや、操作を即時実行するためのバインディングも含まれます。
値バインディング: データを表示するUIコンポーネントで使用します。値のバインディングは、単純なテキスト・フィールドで使用する最も基本的なものから、リスト、表、ツリーでのUIコントロールのニーズをサポートするような、より高度なリスト、ツリーのバインディングまで、様々な種類があります。
アクション・バインディング: ハイパーリンクやボタンなどのUIコンポーネントで使用され、コードを記述することなく、データ・コレクションやデータ・コントロールの組込み操作またはカスタム操作を実行します。
図13-1は、バインディングによってUIコンポーネントがデータ・コントロールのコレクションとメソッドに関連付けられる様子を示しています。
ページのUIコンポーネントをサポートするバインディングのグループは、ページ定義ファイルというページ固有のXMLファイルに記述されます。ADF Modelレイヤーでは実行時にこのファイルが使用され、ページのバインディングがインスタンス化されます。これらのバインディングは、バインディング・コンテナと呼ばれるリクエスト・スコープ・マップに保持され、EL式#{bindings}
を使用して各ページ・リクエスト中にアクセスできます。この式により、現在のページのバインディング・コンテナが常に評価されます。
ヒント: 現在のバインディング・コンテナは、プログラム的なアクセス用の |
「データ・コントロール」パネルから項目をドラッグし、それを特定のUIコンポーネントとしてページ上にドロップすることで、データバインドされたユーザー・インタフェースを設計できます。データ・コントロールを使用してUIコンポーネントを作成すると、そのコンポーネントを選択したデータ・コントロールにバインドするために必要な、様々なコードおよびオブジェクトがJDeveloperによって自動的に作成されます。
注意: ADF Modelレイヤーを使用してビジネス・サービスへのアクセスを実行すると、ビューとビジネス・サービスは同期を維持します。たとえば、データ・コントロール参照をアプリケーション・モジュール・インスタンスにクラス・キャストして、メソッドを直接コールすることにより、アプリケーション・モジュール上でメソッドをコールできますが、モデル・レイヤーがバイパスされ、変更が行われた場合でもモデル・レイヤーでは認識されなくなります。 |
ADFモデル・レイヤーを構成または使用する前に、他のADF機能を理解しておくと役立つ場合があります。また、モデル・レイヤーの構成によって可能になることについても、確認しておくことをお薦めします。次に、関連する他の機能へのリンクを示します。
ADFモデルとデータ・バインディングは、ビジネス・レイヤーに依存します。ほとんどの場合、操作の対象となるのは、ビュー・オブジェクトの表示です。詳細は、第5章「ビュー・オブジェクトを使用したSQL問合せの定義」を参照してください。また、第42章「ビュー・オブジェクトの高度な手法」で説明している高度な機能についても理解しておくことをお薦めします。
ADFモデル・レイヤーを使用して、ビュー・ページを作成できます。この章でビュー・レイヤーのデータ・バインディングのしくみに関する基本情報を確認したら、第V部「データバインドされたWebユーザー・インタフェースの作成」で、データ・バインディングを使用して特定のビュー機能を作成する場合の詳細を参照してください。
ADFモデルとページ・ライフサイクルの連携の詳細は、第25章「Fusionページ・ライフサイクル」を参照してください。
モデル・レイヤーに影響を与える構成パラメータの詳細なリストについては、A.7項「DataBindings.cpx」およびA.8項「pageNamePageDef.xml」を参照してください。
バインディング・プロパティの詳細なリストについては、付録B「Oracle ADFバインディング・プロパティ」を参照してください。
アプリケーション・モジュールのデータ・コントロールは、リクエスト開始時に使用可能なアプリケーション・モジュール・インスタンスを自動的に取得するアプリケーション・モジュール・プールのシン・アダプタです。現在のリクエスト中に、アプリケーション・モジュールのデータ・コントロールにより、現在のユーザー・セッションのかわりに、アプリケーション・モジュール・インスタンスへの参照が保持されます。リクエスト終了時に、インスタンスは、データ・コントロールによって解放され、プールに戻されます。ここで重要なことは、データ・コレクション、組込み操作およびサービス・メソッドに対してバインディング・オブジェクトが求めるインタフェースを、アプリケーション・モジュール・コンポーネントが直接実装することです。最適化されたこのような相互作用により、バインディングが次のように直接、データ・モデル内のアプリケーション・モジュール・インスタンスに作用します。
任意のビュー・オブジェクト・インスタンスのデフォルト行セットのデフォルト行セット・イテレータに直接バインドするイテレータ・バインディング。行セットのイテレータにより、現在のオブジェクトおよび現在のレンジ情報が管理されます。
ヒント: イテレータ・バインディングを使用して、作成した名前付きのセカンダリ行セットにバインドすることもできます。セカンダリ行セット・イテレータにバインドするには、 |
次のいずれかに直接バインドするアクション・バインディング
データ・コントロールのクライアント・インタフェース上のカスタム・メソッド
アプリケーション・モジュールの組込み操作およびビュー・オブジェクト
図13-2は、アプリケーション・モジュールのデータ・コントロールが果すプール管理ロールを示し、バインディングとアプリケーション・モジュール・インスタンスの間の直接リンクを説明しています。
「データ・コントロール」パネルで、アイコンをパネルからページのビジュアル・エディタにドラッグ・アンド・ドロップして、データバインドされたUIコンポーネントを作成します。図13-3は、StoreFrontモジュールのデータ・コントロールを表示する「データ・コントロール」パネルを示しています。
「データ・コントロール」パネルには、アプリケーションのビジネス・サービスに対して作成されたすべてのデータ・コントロールがリストされます。また、UIコンポーネントへのバインドに使用できるコレクション(データ・オブジェクトの行セット)、メソッドおよび組込み操作がすべて公開されます。
注意: それらを公開するようにJDeveloperを構成している場合は、ビュー・リンク・アクセッサの戻り値も表示されます。詳細は、5.6項「マスター/ディテール階層における複数表の使用」を参照してください。アクセッサ・メソッドの表示は次の手順で行います。
|
たとえば、ビジネス・サービスを定義するためにADF Business Componentsを使用するアプリケーションでは、「データ・コントロール」パネル上の各データ・コントロールは特定のアプリケーション・モジュールを表し、そのアプリケーションのデータ・モデルでビュー・オブジェクト・インスタンスを公開します。データ・コントロール内のオブジェクトの階層は、アプリケーション・モジュール・データ・モデル用に追加されているビュー・オブジェクト間のビュー・リンクによって定義されます。ビュー・オブジェクトとビュー・リンクの作成の詳細は、第5章「ビュー・オブジェクトを使用したSQL問合せの定義」を、データ・モデルへのビュー・リンクへの追加の詳細は、5.6.4項「データ・モデルでアクティブなマスター/ディテール調整を有効化する方法」を参照してください。
ヒント: 関連付けられたデータ・コントロール・オブジェクトを右クリックして、「定義の編集」を選択すると、ビュー・オブジェクトの概要エディタを開くことができます。 |
たとえば、StoreServiceAMDataControl
アプリケーション・モジュールによりStoreFrontモジュール・アプリケーションのビジネス・サービス・レイヤーが実装されます。このデータ・モデルには、複数のマスター/ディテール階層など、多数のビュー・オブジェクト・インスタンスが含まれています。ADFサンプル・アプリケーションのビュー・レイヤーはJSFページで構成され、このページのUIコンポーネントは、StoreServiceAMDataControl
のデータ・モデル内のビュー・オブジェクト・インスタンスのデータと、そのクライアント・インタフェース上の組込み操作およびサービス・メソッドにバインドされています。
各ビュー・オブジェクト・インスタンスは、ビュー・オブジェクト・インスタンス名と対応する名前が付いたデータ・コレクションとして表示されます。図13-4は、 StoreServiceAMDataControl
のデータ・モデルのビュー・オブジェクト・インスタンスが「データ・コントロール」パネルでどのように表示されるかを示しています(ビューを簡略化するために、この図では各ビュー・オブジェクトに対して表示される詳細を省略しています)。「データ・コントロール」パネルは、マスター・データ・コレクションの下にネストされたディテール・データ・コレクションを表示することで、アプリケーション・モジュールのデータ・モデル内のマスター/ディテール階層を示します。
「データ・コントロール」パネルは、アプリケーション・モジュールのクライアント・インタフェース上の各カスタム・メソッドも、メソッド名と対応する名前が付いたデータ・コントロール・カスタム操作として表示します。メソッドが引数を受け入れると、その引数は、操作ノード内にネストされた操作パラメータとして「パラメータ」ノードに表示されます。
アプリケーション・モジュールのデータ・コントロールでは、図13-5に示すように、Commit
およびRollback
という2つのデータ・コントロールの組込み操作を公開します(データ・コントロール・ツリー内の「操作」ノードでは、ビューを簡略化するために、データ・コレクションおよびカスタム操作がすべて省略されています)。これらの操作は、実行時にデータ・バインディング・レイヤーによって起動されると、現在のアプリケーション・モジュール・インスタンスに関連付けられているTransaction
オブジェクトのcommit()
メソッドおよびrollback()
メソッドに委譲します。
注意: 多数のビュー・オブジェクト・インスタンスおよびカスタム・メソッドがあるアプリケーション・モジュールでは、データ・コントロールの直接の子ノードである「操作」ノードを見つけるには、「データ・コントロール」パネル表示のスクロールが必要な場合があります。このノードに、その組込み操作が含まれています。 |
ビュー・オブジェクト属性は、作成したカスタム・メソッドと同様、対応するデータ・コレクションの直接の子ノードとして表示されます。図13-6は、アプリケーション・モジュールのデータ・モデル内の各ビュー・オブジェクト・インスタンスが「データ・コントロール」パネルでどのように表示されるかを示しています。いずれかのカスタム・メソッドをビュー・オブジェクトのクライアント・インタフェースに表示することを選択している場合、そのメソッドは、同じレベルのビュー・オブジェクト属性のすぐ下にカスタム・メソッドとして表示されます。メソッドが引数を受け入れると、その引数は、ネストされた「パラメータ」ノードに操作パラメータとして表示されます。
デフォルトでは、ビュー・オブジェクトで問合せ可能な各属性に対して暗黙的な表示基準が作成されます。それらは、図13-6に示すように、「名前付き基準」ノードの下に「すべての問合せ可能な属性」ノードとして表示されます。ビュー・オブジェクトに対して作成された名前付きビュー基準は「名前付き基準」ノードの下に表示されます。View Criteria式(暗黙的および名前付きの両方)は、メソッドの戻り値として表示されます。問合せで使用される結合と基準項目、ネストされた基準(該当する場合)が子として表示されます。これらの項目を使用して、第31章「ADFによるデータバインドされた検索フォームの作成」で説明している、クイック検索フォームを作成します。
図13-6に示すように、データ・コレクションの下の「操作」ノードには、そのコレクションで使用可能な組込み操作がすべて表示されます。操作で1つ以上のパラメータを受け入れると、そのパラメータは、ネストされた「パラメータ」ノードに表示されます。実行時に、これらのデータ・コレクション操作の1つがデータ・バインディング・レイヤーによって名前別に起動されると、アプリケーション・モジュールのデータ・コントロールは、組込み機能を処理するViewObject
インタフェース上の適切なメソッドにそのコールを委譲します。組込み操作は、現在の行に影響を与える操作、データ・コレクションをリフレッシュする操作、および他の全操作の3つのカテゴリに分類されます。
現在の行に影響を与える操作:
Create
: 現在の行になる新規行を作成するが、その行の挿入なし。
CreateInsert
: 現在の行となる新規行を作成し、新規の空白行をデータソースに挿入。
Create
with Parameters
: パラメータ値を使用して新しい行を作成。渡したパラメータによって、次の作成時の値を指定できます。
多相ビュー・オブジェクトの多相化識別子
多相ビュー・オブジェクトの作成に必要な、構成する側の親の外部キー属性
構成される側の子ビュー・オブジェクト行(親行のコンテキストで作成されない場合)
多相ビュー・オブジェクトの詳細は、42.6項「ビュー・オブジェクトを使用した複数の行タイプの処理」を参照してください。
Delete
: 現在の行を削除。
First
: 現在の行を行セット内の最初の行に設定。
Last
: 現在の行を行セット内の最後の行に設定。
Next
: 行を行セット内の次の行に設定。
Next Set
: 1セット後の行に移動。
Previous
: 現在の行を行セット内の前の行に設定。
Previous
Set
: 1セット前の行に移動。
setCurrentRowWithKey:
パラメータとして渡された行キーのシリアライズされた文字列表現を使用して行の検索を試行。検出されると、その行が現在の行になります。
setCurrentRowWithKeyValue:
パラメータとして渡された主キーの属性値を使用して行の検索を試行。検出されると、その行が現在の行になります。
データ・コレクションをリフレッシュする操作:
Execute
: ビュー・オブジェクトの問合せを実行または再実行してデータ・コレクションをリフレッシュ。バインド・パラメータがある場合、その値は現在の値のままになります。
ExecuteWithParams
: パラメータとして渡された名前付きのバインド変数に新しい値を割り当てた後で、ビュー・オブジェクトの問合せを実行または再実行することにより、データ・コレクションをリフレッシュ。
注意:
|
他の全操作:
removeRowWithKey:
パラメータとして渡された行キーのシリアライズされた文字列表現を使用して行の検索を試行。検出されると、その行が削除されます。
Find
: データ・コレクションの検索モードのオンとオフの切替え。
他のアプリケーション・モジュールのネストされたインスタンスを組み込んで複合アプリケーション・モジュールを作成すると、「データ・コントロール」パネルではこのコンポーネント・アセンブリがツリー階層で表示されます。たとえば、StoreServiceAMDataControl
アプリケーション・モジュールの他に、同じパッケージに次のアプリケーション・モジュールも作成したとします。
ProductService
という名前のアプリケーション・モジュールを作成し、そのデータ・コントロール名をProductService
に変更
CompositeService
という名前のアプリケーション・モジュールを作成し、そのデータ・コントロール名をCompositeService
に変更
次に、OtherViewObject
およびAnotherViewObject
という名前の2つのビュー・オブジェクト・インスタンスをCompositeService
のデータ・モデルに追加し、「アプリケーション・モジュールの編集」ダイアログの「アプリケーション・モジュール」ページで、StoreServiceAMDataControl
アプリケーション・モジュールのインスタンスおよびProductService
アプリケーション・モジュールのインスタンスを追加して、これらのインスタンスをCompositeService
の一部として再使用するとします。図13-7は、CompositeService
が「データ・コントロール」パネルに表示される様子を示しています(わかりやすくするために、ネストされたStoreServiceAMDataControl
の構造のほとんどが省略されています)。StoreServiceAMDataControl
およびProductService
のネストされたインスタンスは、CompositeService
データ・コントロール内にネストされたパネル・ツリーに表示されます。ネストされたアプリケーション・モジュール・インスタンスによってクライアントに公開されるデータ・モデル全体および一連のクライアント・メソッドは、それらを再使用するCompositeService
の一部として自動的に使用可能になります。
StoreServiceAMDataControl
およびProductService
のネストされたインスタンスをCompositeService
内で再使用していても、StoreServiceAMDataControl
およびProductService
アプリケーション・モジュールもパネル・ツリー内の最上位データ・コントロール・ノードとして表示されることに注意してください。JDeveloperでは、StoreServiceAMDataControl
またはProductService
がCompositeService
から独立した個別のデータ・コントロールとして使用される場合があると想定し、この3つすべてを表示します。正しいデータ・コントロールからデータ・バインディングのドラッグ・アンド・ドロップを実行するように注意してください。CompositeService
データ・コントロールに集約された部分である、ネストされたStoreServiceAMDataControl
インスタンスのデータ・モデルのビュー・オブジェクト・インスタンスをページで使用する場合は、必ず、パネルでCompositeService
データ・コントロール・ノードの一部として表示されるデータ・コレクションを選択してください。
目的の用途に応じたドラッグ・アンド・ドロップ操作をすることが重要です。パネル内のトップレベルの StoreServiceAMDataControl
データ・コントロール・ノードからデータ・コレクションをドロップすると、実行時にページ上で、StoreServiceAMDataControl
コンポーネント・プールから取得したStoreServiceAMDataControl
アプリケーション・モジュールのインスタンスが使用されます。CompositeService
の一部としてネストされたStoreServiceAMDataControl
のインスタンスのデータ・コレクションをドロップすると、実行時にページ上でCompositeService
コンポーネント・プールから取得したCompositeService
アプリケーション・モジュールのインスタンスが使用されます。各タイプのアプリケーション・モジュールのデータ・コントロールでは異なるトランザクションおよびデータベース接続が使用されるため、ネストされたアプリケーション・モジュールと最上位のデータ・コントロールの両方から不適切にデータ・コレクションを組み合せると、実行時に予期せぬ動作が発生します。
「データ・コントロール」パネルは、JDeveloperの最上部左側にあるアプリケーション・ナビゲータにあります。コンテンツを表示するには、パネル・ヘッダーをクリックしてパネルを展開します。パネル・ヘッダーを表示しないと、アプリケーション・ナビゲータが表示されない場合があります。
アプリケーション・ナビゲータおよび「データ・コントロール」パネルを表示する手順:
メイン・メニューから、「表示」→「アプリケーション・ナビゲータ」を選択します。
「データ・コントロール」アコーディオン・パネルを開くには、図13-8に示す「データ・コントロール」ヘッダーの展開アイコンをクリックします。
アプリケーション・モジュールまたは基礎となるサービスが変更されたら必ず、変更を表示するためにデータ・コントロールを手動でリフレッシュする必要があります。アプリケーション・モジュール・データ・コントロールをリフレッシュするには、「データ・コントロール」パネルのヘッダーにある「リフレッシュ」アイコンをクリックします(図13-9を参照)。
「リフレッシュ」をクリックすると、使用可能なすべてのデータ・コントロールが「データ・コントロール」パネルで検索され、データ・モデルに対して加えられた構造的な変更が反映されます。
別のプロジェクトで使用できるよう、データ・コントロールをパッケージ化できます。たとえば、ある開発グループがサービスおよびデータ・コントロールを作成している間に、別の開発グループがUIを作成する場合があります。最初のグループはサービスおよびデータ・コントロールを作成し、Oracle ADFライブラリとしてパッケージ化し、2番目のグループへ送信します。2番目のグループは、リソース・パレットを使用してそのデータ・コントロールを自分達のプロジェクトに追加できます。詳細は、第38章「アプリケーション・コンポーネントの再利用」を参照してください。
「データ・コントロール」パネルから項目をドラッグし、それを特定のUIコンポーネントとしてページ上にドロップすることで、データバインドされたユーザー・インタフェースを設計できます。データ・コントロールを使用してUIコンポーネントを作成すると、そのコンポーネントを選択したデータ・コントロールにバインドするために必要な、様々なコードおよびオブジェクトがJDeveloperによって自動的に作成されます。
「データ・コントロール」パネルでは、各データ・コントロール・オブジェクトが特定のアイコンで表されます。表13-1は、各アイコンが表すデータ・コントロール・オブジェクト、「データ・コントロール」パネルの階層内で表示される場所、そのアイコンを使用して作成できるコンポーネントを示しています。
表13-1 「データ・コントロール」パネルのアイコンおよびオブジェクト階層
アイコン | 名前 | 説明 | 作成できるコンポーネント |
---|---|---|---|
|
データ・コントロール |
データ・コントロールを表します。データ・コントロール自体を使用してUIコンポーネントを作成することはできませんが、その下に表示される子オブジェクトは、いずれも使用できます。ビジネス・サービスの定義方法によっては、複数のデータ・コントロールが存在することがあります。 通常、各アプリケーション・モジュールに対するデータ・コントロールは1つです。ただし、他のタイプのビジネス・サービス(Webサービスなど)に対して作成された追加のデータ・コントロールがある場合があります。Webサービスのデータ・コントロールの作成の詳細は、第14章「ADFモデル・レイヤーを使用したWebサービスの公開」を参照してください。 |
他のオブジェクトのコンテナとして機能し、コンポーネント作成には使用されません。 |
|
コレクション |
名前付きデータ・コレクションを表します。データ・コレクションとは、データ・モデル内のデータ・オブジェクト・セット(行セットとも呼ばれる)です。データ・コレクション内の各オブジェクトは、データ・モデル内の特定の構造化データ項目(行とも呼ばれる)を表します。このガイド全体を通して、データ・コレクションおよびコレクションという用語は、区別なく使用されます。 アプリケーション・モジュールにおいて、データ・コレクションは、ビュー・オブジェクト・インスタンスに含まれているデフォルトの行セットです。コレクションの名前は、ビュー・オブジェクト・インスタンス名と一致します。 ビュー・リンクによって、2つのビュー・オブジェクト間にマスター/ディテール関係が作成されます。アプリケーション・モジュール・データ・モデルにディテール・ビュー・オブジェクト(ビュー・リンクからの結果)のインスタンスを明示的に追加する場合、そのディテール・ビュー・オブジェクトに含まれるコレクションは、マスター・ビュー・オブジェクトに含まれるコレクションの子として表示されます。データ・モデルへのディテール・ビュー・オブジェクトの追加の詳細は、5.6.4項「データ・モデルでアクティブなマスター/ディテール調整を有効化する方法」を参照してください。 コレクションの下の子は、コレクションの属性、ビュー・リンクによって関連付けられる他のコレクション、コレクションから値を戻すカスタム・メソッド、またはコレクションに対して実行できる組込み操作などです。 ビュー・リンク・アクセッサの戻り値を表示するようにJDeveloperを構成している場合は、それらも表示されます。 |
フォーム、表、グラフ、ツリー、レンジ・ナビゲーションの各コンポーネント、およびマスター/ディテール・コンポーネント。 データ・コントロールのコレクションを使用したフォーム作成の詳細は、第26章「データバインドされた基本的なページの作成」を参照してください。 コレクションを使用した表作成の詳細は、第27章「ADFによるデータバインドされた表の作成」を参照してください。 UIコンポーネントを作成するためのマスター/ディテール関係の使用の詳細は、第29章「マスター/ディテール・データの表示」を参照してください。 グラフ、チャートおよびその他の視覚的なUIコンポーネントの作成の詳細は、第33章「データバインドされたADFデータ視覚化コンポーネントの作成」を参照してください。 |
|
属性 |
オブジェクト内の個別のデータ要素(行の属性など)を表します。属性は、自分の属するコレクションまたはメソッド戻りの下に、子として表示されます。 ビュー・オブジェクトに含まれていた属性のみが、コレクションの下に示されます。ビュー・オブジェクトが1つ以上のエンティティ・オブジェクトを結合する場合、ビュー・オブジェクトのコレクションには、すべての基礎となるエンティティ・オブジェクトから選択された属性が含まれます。 |
ラベル、テキスト・フィールド、日付、値リスト、および選択リストの各コンポーネント。 属性を使用したページのフィールド作成の詳細は、26.2項「属性を使用したテキスト・フィールドの作成方法」を参照してください。 リスト作成の詳細は、第30章「データバインドされた選択リストおよびシャトルの作成」を参照してください。 |
|
構造化された属性 |
Javaプリミティブ・タイプ(属性として示される)または任意のタイプのコレクションのいずれでもない、戻りオブジェクトを示します。構造化属性の例としてドメインがあります。これはアプリケーションのメンテナンスを簡素化するために開発者によって作成されたデータ型です。 ドメインの詳細は、4.15項「ドメインを使用したカスタム検証済データ型の作成」を参照してください。 |
ラベル、テキスト・フィールド、日付、値リスト、および選択リストの各コンポーネント。 |
|
メソッド |
データ・コントロールの操作またはその公開された構造のいずれかを表し、パラメータの受入れや、ビジネス・ロジックの実行を行ったり、オプションで単一の値、構造、またはコレクションを戻すことができます。 アプリケーション・モジュール・データ・コントロールでは、カスタム・メソッドがアプリケーション・モジュール自体の中で定義され、通常は、何も戻さないか、単一のスカラー値を戻します。カスタム・メソッド作成の詳細は、第9章「アプリケーション・モジュールによるビジネス・サービスの実装」を参照してください。 |
コマンド・コンポーネント。 パラメータを受け入れるメソッドの場合: コマンド・コンポーネントおよびパラメータ付きフォーム。 |
|
メソッド戻り値 |
カスタム・メソッドによって戻されたオブジェクトを表します。戻されたオブジェクトは、単一の値またはコレクションです。 アプリケーション・モジュールで定義されたカスタム・メソッドから戻されるのは通常、単一のスカラー値です。データへの最新の変更の表示はデータ・モデルのビュー・オブジェクトによって処理されるため、アプリケーション・モジュール・メソッドでビュー・レイヤーにデータのセットを戻す必要はありません(詳細は、3.4項「Oracle ADFアクティブ・データ・モデルの概要」を参照)。ただし、非アプリケーション・モジュール・データ・コントロールのカスタム・メソッド(CSVファイルのデータ・コントロールなど)は、ビュー・レイヤーにコレクションを戻すことができます。 メソッド戻りは、これを戻すメソッドの下に、子として表示されます。メソッド戻りの下に子として表示されるオブジェクトは、コレクションの属性、親コレクションに関連するアクションを実行する他のメソッド、または親コレクションで実行できる操作などです。 |
コレクションおよび属性と同じコンポーネント。 名前付き基準については、問合せフォームまたはクイック問合せフォーム。詳細は、第31章「ADFでデータバインドされた検索フォームの作成」を参照してください。 単一値のメソッド戻り値がドロップされると、メソッドはフレームワークにより自動的に起動されなくなります。メソッドを起動するために、実行可能ファイルとして起動アクションを作成するか、対応するメソッドをボタンとしてドロップする必要があります。実行可能ファイルの詳細は、13.7.2.2項「ページ定義ファイルで定義されるExecutablesバインディング・オブジェクト」を参照してください。 |
|
操作 |
親オブジェクトに対してアクションを実行する、組込みデータ・コントロール操作を表します。データ・コントロール操作は、コレクションまたはメソッド戻り値の下の「操作」ノードと、ルート・データ・コントロール・ノードの下にもあります。特定のコレクションまたはメソッド戻りの子である操作は、それらのオブジェクトにのみ作用し、データ・コントロール・ノードの下の操作は、そのデータ・コントロール内のすべてのオブジェクトに作用します。 1つ以上のパラメータが操作に必要な場合、それらのパラメータは操作の下の「パラメータ」ノードにリストされます。 |
ボタン、リンクおよびメニューなどのUIコマンド・コンポーネント。 詳細は、26.4項「レンジ・ナビゲーションのフォームへの組入れ」および26.5項「既存レコードを編集するフォームの作成」を参照してください。 |
|
パラメータ |
メソッドまたはその下に表示される操作によって宣言されたパラメータ値を表します。パラメータは、メソッドまたは操作の下の「パラメータ」ノード内に表示されます。 |
ラベル、テキストおよび選択リストの各コンポーネント。 |
JDeveloperは、ドロップするデータ・コントロール項目に対してそれぞれ選択できるUIコンポーネントの事前定義済セットを備えています。
作業を始める前に、次のようにします。
「データ・コントロール」パネルの各種オブジェクトに関する知識があると役立つ場合があります。詳細は、13.4項「データ・コントロール・パネルの使用」を参照してください。
「データ・コントロール」パネルを使用してUIコンポーネントを作成する手順:
「データ・コントロール」パネルで項目を選択し、ページのビジュアル・エディタにその項目をドラッグします。パネルの各項目の定義は、表13-1を参照してください。
ヒント: 操作またはメソッドをタスク・フローのメソッド・アクティビティにドロップする必要がある場合は、ダイアグラム内のアクティビティにドラッグ・アンド・ドロップするだけです。 |
ポップアップ・メニューから、UIコンポーネントを選択します。
「データ・コントロール」パネルから項目をドラッグしてページにドロップすると、ドロップした項目に使用できるすべてのデフォルトUIコンポーネントのポップアップ・メニューが表示されます。表示されるコンポーネントは、プロジェクト内のライブラリに基づきます。
図13-11は、「データ・コントロール」パネルのデータ・コレクションがページにドロップされる際に表示されるポップアップ・メニューを示しています。
ポップアップ・メニューから選択したコンポーネントに応じて、そのコンポーネントの外観を定義するためのダイアログが自動的に表示されます。たとえば、ポップアップ・メニューから「ADF読取り専用表」を選択すると、「表の列の編集」ダイアログが表示されます。このダイアログを使用して、表の列に表示する属性、列ラベル、各列に使用するテキスト・フィールドのタイプ、および組み込む機能(行選択や列のソートなど)を定義できます。表の作成の詳細は、第27章「ADFによるデータバインドされた表の作成」を参照してください。
デフォルトで選択されたUIコンポーネントはまず、対応するビジネス・オブジェクト上で設定されているUIコントロール・ヒントで決定されます。コントロール・ヒントが設定されていない場合、JDeveloperでは標準のフォームおよび表の入力コンポーネントと読取り専用のフォームおよび表の出力コンポーネントが使用されます。リストのコンポーネントは、データ・コントロール・オブジェクトをドロップするときに選択するリストの型に基づいて決定されます。
コンポーネントを選択すると、JDeveloperではビジュアル・エディタのページにそのUIコンポーネントが挿入されます。たとえば、「データ・コントロール」パネルからコレクションをドラッグして、ポップアップ・メニューから「ADF読取り専用表」を選択した場合は、図13-12のように、ビジュアル・エディタに読取り専用の表が表示されます。
デフォルトでは、「データ・コントロール」パネルでADF Facesコンポーネントを使用したときに作成されるUIコンポーネントは、ADFデータ・コントロール内の属性にバインドされ、1つ以上の組込み機能が装備されます。これらの機能は次のとおりです。
データバインド・ラベル
ツールチップ
書式設定
基本的なナビゲーション・ボタン
検証(検証規則が特定の属性にアタッチされている場合。詳細は、第7章「検証とビジネス・ルールの宣言的な定義」を参照してください。
デフォルトのコンポーネントは、そのまま使用しても十分機能します。ただし、特定のニーズに合せて変更することができます。各コンポーネントおよびその各種機能の詳細は、第V部「データバインドされたWebユーザー・インタフェースの作成」を参照してください。
ヒント: ページで使用するADFデータバインド・コンポーネントのタイプを変更する場合は、ビジュアル・エディタまたは構造ウィンドウを使用してそのコンポーネントを削除し、「データ・コントロール」パネルから新しいコンポーネントをドラッグ・アンド・ドロップする方法が最も簡単です。データバインドされたコンポーネントをページから削除するときにビジュアル・エディタまたは構造ウィンドウを使用する場合、ページ定義ファイルの関連するバインディング・オブジェクトが他のどのコンポーネントからも参照されていなければ、これらのバインディング・オブジェクトはJDeveloperによって自動的に削除されます(ソース・エディタを使用する場合は、バインディング・オブジェクトの自動削除は行われません)。 |
Oracle ADF WebアプリケーションはJSFフレームワークを使用して作成されますが、ADFデータバインドUIコンポーネントを含むページのレンダリングおよび処理を行うために、いくつかの追加アプリケーション・オブジェクト定義が必要になります。「データ・コントロール」パネルを使用しない場合、これらの様々なファイルを手動で構成する必要があります。一方、「データ・コントロール」パネルを使用した場合は、必要なすべての手順がJDeveloperによって行われます。
DataBindings.cpx
ファイルがプロジェクトのデフォルト・パッケージに作成されます(このファイルが存在しない場合のみ)。また、そのページ用にエントリが追加されます。
DataBindings.cpx
ファイルは、アプリケーションのバインディング・コンテキストを定義します。バインディング・コンテキストはコンテナ・オブジェクトの1つで、使用可能なデータ・コントロールおよびデータ・バインディング・オブジェクトのリストを含みます。詳細は、13.4.3項「実行時に行われる処理: バインディング・コンテキストの動作方法」を参照してください。DataBindings.cpx
ファイルによって、個々のページがページ定義ファイルに含まれるバインディング定義にマップされ、これらのページが使用するデータ・コントロールが登録されます。詳細は、13.5項「DataBindings.cpxファイルでの作業」を参照してください。
META-INFディレクトリにadfm.xml
ファイルが作成されます。このファイルにより、DataBindings.cpx
ファイルのレジストリが作成され、バインディング・コンテキストを作成できるように、実行時にアプリケーションで特定できます。
web.xml
ファイルにADFバインディング・フィルタが登録されます。
このADFバインディング・フィルタによって、バインディング・コンテキストへのアクセスに必要なHTTPリクエストが事前処理されます。バインディング・フィルタの構成の詳細は、13.6項「ADFバインディング・フィルタの構成」を参照してください。
ビュー・オブジェクトに次のライブラリが追加されます。
ADF Facesデータバインディング・ランタイム
Oracle XML Parserバージョン2
JDeveloperランタイム
ADF Modelランタイム
BC4Jランタイム
Oracle JDBC
Connection Manager
BC4J Oracleドメイン
パッケージ定義ファイルがページ定義サブパッケージに追加されます(ページに対してファイルが存在しない場合)。デフォルトのサブパッケージは、adfmsrc
ディレクトリにあるview.pageDefs
です。
ヒント: 「プロジェクト・プロパティ」ダイアログ(プロジェクト・フォルダをダブルクリックするとアクセスできる)のADFモデル設定ページで、パッケージ構成(名前と場所など)を設定できます。 |
ページ定義ファイル(pageName
PageDef.xml
)は、アプリケーションのビュー・レイヤーにある各ページのADFバインディング・コンテナを定義します。バインディング・コンテナでは、ページのすべてのADFバインディング・オブジェクトへのランタイム・アクセスが行われます。ページ定義ファイルを使用して、特定のUIコンポーネントに対するバインディング・オブジェクト定義を定義および編集する方法は、後の章で説明します。ページ定義ファイルの詳細は、13.7項「ページ定義ファイルでの作業」を参照してください。
ページ定義ファイルが構成されます。この処理では、ページによって参照されるバインディング・オブジェクトの定義も追加されます。
ADF FacesコンポーネントがJSFページに追加されます。
これらの事前作成済のコンポーネントには、ページ定義ファイルのバインディング・オブジェクトを参照するADFデータ・バインディング式言語(EL)式が含まれます。詳細は、13.8項「ADFデータバインディングEL式の作成」を参照してください。
すべてのライブラリ、ファイル、およびADF Facesコンポーネントが必要とする構成要素が追加されます。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』の付録「ADF Facesの構成」を参照してください。
ページにADFバインディングが含まれている場合、実行時には、クライアントまたはコントローラから起動されたビジネス・サービスとのやり取りが、バインディング・コンテキストと呼ばれるシングル・オブジェクトを介して、アプリケーションによって管理されます。バインディング・コンテキストは、アプリケーション内のすべてのデータ・コントロールおよびページ定義のランタイム・マップ(名前付きdataでEL式#{data}
を使用してアクセス可能)です。
図13-13に示すように、ADFライフサイクルでは、アプリケーション・モジュールDataBindings.cpx
およびページ定義ファイルから、Oracle ADFバインディング・コンテキストが作成されます。設計時に使用可能なデータ・コントロールは、すべてのDataControls.dcx
ファイルとワークスペース内のすべてのアプリケーション・モジュールの集合体によって定義されますが、実行時にアプリケーションで使用可能なデータ・コントロールは、DataBindings.cpx
ファイルで定義されます。DataBindings.cpx
ファイルは、アプリケーションのページで使用されているデータ・コントロールをリストに表示し、ページ定義ファイルに定義したバインディング・オブジェクトが格納されているバインディング・コンテナをWebページのURLにマップします。ページ定義ファイルは、アプリケーション・ページで使用するバインディング・オブジェクトを定義します。各ページにページ定義ファイルが1つあります。
バインディング・コンテキストには、これらのオブジェクトの現在の実際のインスタンスは含まれていません。ライブ・インスタンスではなく、マップには必要に応じてデータ・コントロールまたはバインディング・コンテナ・オブジェクトになる参照が含まれています。たとえば、オブジェクト(ページ定義など)がアプリケーションから解放されるか、タスク・フローが終了するか、リクエストの終了時にバンディング・コンテナまたはデータ・コントロールが解放されると、データ・コントロールおよびバンディング・コンテナは参照オブジェクトに戻ります。ADFライフサイクルの詳細は、第25章「Fusionページ・ライフサイクル」を参照してください。
DataBindings.cpx
ファイルでは、アプリケーション全体のバインディング・コンテキストが定義されます。実行時にはこのメタデータから、Oracle ADFバインディング・オブジェクトが作成されます。たとえばリージョンなどのコンポーネントがプロジェクトの外で作成され、インポートされた場合は、アプリケーションに複数のDataBindings.cpx
ファイルが存在することがあります。これらのファイルは個々のページをページ定義ファイルにマップし、どのデータ・コントロールをアプリケーションで使用するかを宣言します。実行時には、DataBindings.cpx
ファイルにリストされたデータ・コントロールのみが、現在のアプリケーションで使用可能になります。
初めて「データ・コントロール」パネルを使用して、ページにコンポーネントを追加したり、アクティビティに操作を追加する際には、JDeveloperによって、ビュー・プロジェクトのデフォルト・パッケージ内に、DataBindings.cpx
ファイルが自動的に作成されます。このファイルは、プロジェクトのadfmsrc
ディレクトリにあります。DataBindings.cpx
ファイルが作成されると、最初のページまたはタスク・フロー・アクティビティ用のエントリが自動的に追加されます。その後、「データ・コントロール」パネルを使用するたびに、そのページまたはアクティビティ用のエントリがまだない場合は、エントリがDataBindings.cpx
に追加されます。
ヒント: JDeveloperではリファクタをサポートしています。つまり、 |
JDeveloperによりDataBindings.cpx
ファイルが作成されると、そのファイルを概要エディタで開くことができます。図13-14は、概要エディタで表示される、StoreFrontモジュール・アプリケーションからのDataBindings.cpx
ファイルを示しています(切り捨てられていることに注意)。
例13-1は、StoreFrontモジュール・アプリケーションの.cpx
ファイルの抜粋を示しています。
例13-1
<Application xmlns="http://xmlns.oracle.com/adfm/application" version="11.1.1.44.61" id="DataBindings" SeparateXMLFiles="false" Package="oracle.fodemo.storefront" ClientType="Generic" ErrorHandlerClass="oracle.fodemo.frmwkext.FODCustomErrorHandler"> <definitionFactories> <factory nameSpace="http://xmlns.oracle.com/adf/controller/binding" className="oracle.adf.controller.internal.binding. TaskFlowBindingDefFactoryImpl"/> <factory nameSpace="http://xmlns.oracle.com/adfm/dvt" className="oracle.adfinternal.view.faces.dvt.model.binding. FacesBindingFactory"/> <dtfactory className="oracle.adf.controller.internal.dtrt.binding. BindingDTObjectFactory"/> </definitionFactories> <pageMap> <page path="/home.jspx" usageId="homePageDef"/> <page path="/templates/StoreFrontTemplate.jspx" usageId="templates_StoreFrontTemplatePageDef"/> <page path="/login.jspx" usageId="loginPageDef"/> <page path="/myOrders.jspx" usageId="myOrdersPageDef"/> . . . </pageMap> <pageDefinitionUsages> <page id="homePageDef" path="oracle.fodemo.storefront.pageDefs.homePageDef"/> <page id="templates_StoreFrontTemplatePageDef" path="oracle.fodemo.storefront.pageDefs. templates_StoreFrontTemplatePageDef"/> <page id="loginPageDef" path="oracle.fodemo.storefront.pageDefs.loginPageDef"/> <page id="myOrdersPageDef" path="oracle.fodemo.storefront.pageDefs.myOrdersPageDef"/> <page id="cart_cartSummaryPageDef" path="oracle.fodemo.storefront.pageDefs.cart_cartSummaryPageDef"/> <page id="checkout_orderPageDef" path="oracle.fodemo.storefront.pageDefs.checkout_orderPageDef"/> . . . </pageDefinitionUsages> <dataControlUsages> <BC4JDataControl id="StoreServiceAMDataControl" Package="oracle.fodemo.storefront.store.service" FactoryClass="oracle.adf.model.bc4j.DataControlFactoryImpl" SupportsTransactions="true" SupportsFindMode="true" SupportsRangesize="true" SupportsResetState="true" SupportsSortCollection="true" Configuration="StoreServiceAMLocalWeb" syncMode="Immediate" xmlns="http://xmlns.oracle.com/adfm/datacontrol"/> <BC4JDataControl id="LookupServiceAMDataControl" Package="oracle.fodemo.storefront.lookups" FactoryClass="oracle.adf.model.bc4j.DataControlFactoryImpl" SupportsTransactions="true" SupportsFindMode="true" SupportsRangesize="true" SupportsResetState="true" SupportsSortCollection="true" Configuration="LookupServiceAMLocal" syncMode="Immediate" xmlns="http://xmlns.oracle.com/adfm/datacontrol"/> </dataControlUsages> </Application>
エディタの「ページ・マッピング」セクションにより、IDを使用して各JSFページまたはタスク・フロー・アクティビティが対応するページ定義ファイルにマップされます。「ページ定義の使用方法」セクションにより、ページ定義IDはアプリケーション内のページ定義ファイルの絶対パスにマップされます。「データ・コントロールの使用方法」セクションは、ページ定義ファイル内で定義済のバインディング・オブジェクトによって使用されるデータ・コントロールを識別します。これらのマッピングにより、ページの起動時にバインディング・コンテナを初期化できます。
概要エディタで、現在のID名をダブルクリックし、インラインで編集することで、ページ定義ファイルまたはデータ・コントロールのID名を変更できます。ID名を変更すると、アプリケーションのすべての参照が更新されます。ただし、JDeveloperで更新されるのはID名のみであり、ファイル名は更新されません。データ・コントロール名を予約語に変更しないようにしてください。詳細は、9.2.5項「既存のアプリケーション・モジュールの編集方法」を参照してください。
構造ウィンドウで要素をクリックし、プロパティ・インスペクタを使用してプロパティ値を変更することもできます。DataBindings.cpx
ファイルの要素および属性の詳細は、A.7項「DataBindings.cpx」を参照してください。
ADFバインディング・フィルタはサーブレット・フィルタの1つで、oracle.adf.model.servlet.ADFBindingFilter
クラスのインスタンスです。ADF Webアプリケーションは、ADFバインディング・フィルタを使用して、バインディング・コンテキストへのアクセスが必要なすべてのHTTPリクエストを前処理します。これを行うには、ADFバインディング・フィルタがアプリケーションに存在するすべてのDataBindings.cpx
ファイルを認識している必要があります。
「データ・コントロール」パネルを使用して、初めてデータバインド・コンポーネントをページに追加する際には、JDeveloperによって、アプリケーションのweb.xml
ファイル内にフィルタが自動的に構成されます。
バインディング・フィルタを構成するために、JDeveloperによって、次の要素がweb.xml
ファイルに追加されます。
ADFバインディング・フィルタ・クラス: javax.servlet.Filter
インタフェースを実装するバインディング・フィルタ・オブジェクトの名前を指定します。
例13-2に示すように、ADFバインディング・フィルタはweb.xml
ファイルで定義されます。filter-name
要素は値adfBindings
を含む必要があり、filter-class
要素はバインディング・フィルタ・クラスの完全修飾名oracle.adf.model.servlet.ADFBindingFilter
を含む必要があります。
フィルタ・マッピング:フィルタをWebアプリケーション内の静的リソースまたはサーブレットにリンクします。
実行時にマップ済リソースが要求されると、フィルタが起動します。フィルタ・マッピングは、web.xml
ファイルで例13-3のように定義されます。filter-name
要素は値adfBindings
を含む必要があります。
例13-3 web.xmlファイルで定義されたフィルタ・マッピング
<filter-mapping> <filter-name>adfBindings</filter-name> <servlet-name>Faces Servlet</servlet-name> <dispatcher>FORWARD</dispatcher> <dispatcher>REQUEST</dispatcher> </filter-mapping>
ヒント:
|
ADFバインディング・フィルタは、実行時に次の機能を実行します。
フィルタを初期化する際に、web.xml
ファイルでフィルタ・パラメータとして指定されている名前で、文字コードをオーバーライドします。フィルタinit-param
要素のパラメータ名は、encoding
です。
ADFContext
オブジェクトをインスタンス化します。このオブジェクトは、Fusion Webアプリケーションの実行コンテキストであり、ADFのコンテキスト情報を含んでいます。このような情報には、セキュリティ・コンテキストや、リクエストとレスポンスのオブジェクトを含む環境クラスなどがあります。
ユーザーのHTTPセッションのバインディング・コンテキストを初期化します。バインディング・コンテキストを初期化するには、まず現在のプロジェクトのadfmsrc
ディレクトリにあるDataBindings.cpx
ファイルの定義に従ってバインディングをロードします。アプリケーションに別のプロジェクトからインポートされたDataBindings.cpx
ファイルが含まれている場合、これらのファイルはアプリケーションのクラス・パスにあります。さらにフィルタにより、アプリケーションのクラス・パスで見つかった補助.cpx
ファイルがロードされます。
同じブラウザ(フレームセットなど)から送信されるHTTPリクエストをシリアライズし、マルチスレッドの問題を回避します。
リクエストが送信されることをデータ・コントロール・インスタンスに通知し、リクエストごとに必要な設定が行われるようにします。
レスポンスがクライアントに送信された後でデータ・コントロール・インスタンスに通知し、リクエストごとに必要なクリーンアップが行われるようにします。
ページ定義ファイルは、実行時にUIコンポーネントにデータを移入するバインディング・オブジェクトを定義します。ADFバインディングを持つすべてのページには、対応するページ定義ファイルが必要です。このファイルには、そのページで使用するバインディング・オブジェクトの定義が含まれています。ページ定義ファイルによって、すべてのADFバインディングに設計時アクセスが提供されます。実行時には、ページ定義ファイルによって定義されたバインディング・オブジェクトが、ページ定義ファイルの実行時インスタンスであるバインディング・コンテナ内でインスタンス化されます。
注意: 同じページに複数のウィンドウが開いていると、ADFコントローラによって各ウィンドウに独自の |
「データ・コントロール」パネルを初めて使用する際には、JDeveloperによって、そのページのページ定義ファイルが自動的に作成され、コンポーネントが参照する各バインディング・オブジェクトの定義が自動的に追加されます。それ以降、ページにデータバインド・コンポーネントを追加するたびに、JDeveloperによって、必要なバインディング・オブジェクト定義がページ定義ファイルに自動的に追加されます。
デフォルトでは、ページ定義ファイルは、ビュー・プロジェクトのApplication Sourcesディレクトリにあるview.PageDefs
パッケージに含まれています。対応するJSFページがデフォルト(public_html
)以外のディレクトリ、またはデフォルトのサブディレクトリに保存されると、ページ定義も同じ名前のペッケージに保存されます。たとえば、JSFファイルをpublic_html\myDirectory
ディレクトリ日本すると、ページ定義がmyDirectory
パッケージに保存されます。ページ定義ファイルの場所は、「プロジェクト・プロパティ」ダイアログのADF Model設定ページを使用して変更できます。
JDeveloperによるページ定義ファイルの命名には、次の規則が使用されます。
pageName
PageDef.xml
上のpageName
は、JSFページの名前を表します。つまり、JSFページの名前がhome.jsp
の場合は、デフォルトのページ定義ファイル名はhomePageDef.xml
になります。ページをサブディレクトリに組み入れる場合、Jdeveloperでは、次の規則を使用してディレクトリ名をページ定義ファイル名の接頭辞にします。
directoryName
_
pageName
PageDef.xml
たとえば、StoreFrontモジュールでは、updateUserInfo
ページのページ定義ファイルの名前(「Webコンテンツ」ノードのaccount
サブディレクトリ内に存在)は、account_updateUserInfoPageDef.xml
です。
ヒント: タスク・フローのページ定義は、同じネーミング規則に従います。 |
ページ定義ファイルを開くには、ビジュアル・エディタでページまたはアクティビティを右クリックし、「ページ定義に移動」を選択します。JSFページ場合は、エディタの「バインディング」タブをクリックして、「ページ定義ファイル」リンクをクリックします。
ヒント: JDeveloperでは、「データ・コントロール」パネルを使用してコンポーネントを作成する場合にはJSFページのページ定義、項目をアクティビティにドロップする場合にはタスク・フローのページ定義が自動的に作成されますが、関連付けられたJSFページやタスク・フロー・アクティビティを削除してもページ定義は削除されません(たとえばデスクトップ統合の使用時など、バインディングが必要になる場合でもJSFページを使用せずに残すことができます)。ページ定義が不要になった場合、ページ定義とそのページ定義への参照はすべて手動で削除する必要があります。ただし、対応するページまたはアクティビティがコールされないかぎり、ページ定義を使用してバインディング・コンテキストが作成されることはありません。したがって、必ずしもアプリケーションから未使用のページ定義ファイルを削除する必要があるわけではありません。 |
JDeveloperでページ定義ファイルが作成されると、概要エディタに表示されます。図13-15は、StoreFrontモジュール・アプリケーションのmyOrders.jspx
ページに対して作成された概要エディタのページ定義ファイルを示しています。
概要エディタには次のタブが含まれており、これらを使用してバインディング、コンテキスト・イベント、ページのパラメータを表示および構成できます。
バインディングと実行可能ファイル: 概要エディタのページ定義の「バインディングと実行可能ファイル」タブでは、Bindings、Executablesおよび関連付けられたData Controlsの3つの異なるタイプのオブジェクトが表示されます(BindingsとExecutablesは、選択しないかぎりデータ・コントロールには表示されません)。たとえば、図13-15では、OrderDate1
属性のバインディングはMyOrdersIterator
イテレータを使用して値を取得していることがわかります。イテレータは、StoreServiceAMDataControl
データ・コントロールのMyOrders
コレクションにアクセスしています。詳細は、13.7.2.2項「ページ定義ファイルで定義されるExecutablesバインディング・オブジェクト」を参照してください。
デフォルトでは、モデル・バインディング・オブジェクトは、そのオブジェクトを作成するために使用されたデータ・コントロール・オブジェクトの名前が付けられます。データ・コントロール・オブジェクトが1ページ内で何度も使用される場合、Jdeveloperではデフォルトのバインディング・オブジェクト名に数字を追加して、それぞれが一意になるようにします。13.8項「ADFデータバインディングEL式の作成」は、ADFデータバインディングEL式によるバインディング・オブジェクト名の参照方法について説明しています。
表13-2は、概要エディタで表示される各バインディング・オブジェクトのアイコンを示しています(エディタの「パラメータ」セクションでパラメータ・オブジェクトが表示されますが、これらもバインディング・オブジェクトとみなされます)。
表13-2バインディング・オブジェクト・アイコン
バインディング・オブジェクト型 | アイコン | 説明 |
---|---|---|
パラメータ |
|
パラメータ・バインディング・オブジェクトを表します。 |
バインド |
|
属性値のバインディング・オブジェクトを表します。 |
|
リスト値のバインディング・オブジェクトを表します。 |
|
|
ツリー値のバインディング・オブジェクトを表します。 |
|
|
メソッドのアクション・バインディング・オブジェクトを表します。 |
|
Bindings/ |
|
アクション・バインディング・オブジェクトを表します。また、起動アクションのExecutablesバインディング・オブジェクトとイベントを表します。 |
実行可能ファイル |
|
イテレータ・バインディング・オブジェクトを表します。 |
|
タスク・フローのExecutablesバインディング・オブジェクトを表します。 |
コンテキスト・イベント: アプリケーション内のアーティファクトが登録可能なコンテキスト・イベントを作成できます。たとえばStoreFrontモジュール内で、コンテキスト・イベントを顧客登録ページに使用して、適切な情報トピックを表示できます。register.jspx
ページには2つのリージョンが含まれています。一方のリージョンには顧客登録タスク・フローが含まれ、他方には情報トピックのタスク・フローが含まれています。コンテキスト・イベントが顧客登録リージョンから情報トピック・リージョンに渡され、情報トピック・タスク・フローに正しい情報トピックを表示します。設計時はイベント名、プロシージャ・リージョン、消費者ハンドラー、その他の情報が、ページ定義ファイルのイベント・マップ・セクションに保存されます。
パラメータ: パラメータ・バインディング・オブジェクトは、リクエストの開始時にページが評価するパラメータを宣言します。ADFライフサイクルの詳細は、第25章「Fusionページ・ライフサイクル」を参照してください。静的値、または静的値を割り当てるEL式を使用して、ページ定義ファイル内のパラメータ値を定義できます。
例13-4は、ページ定義ファイルでのパラメータ・バインディング・オブジェクトの定義方法を示しています。
例13-4 ページ定義ファイルのparameters要素
<parameters> <parameter id="filedBy" value="${bindings.userId}"/> <parameter id="status" value="${param.status != null ? param.status : 'Open'}"/> </parameters>
filedBy
パラメータの値は、userID
データ属性(後でbindings
要素内で定義される属性バインディング)のバインディングによって定義されます。status
パラメータの値は、静的値を割り当てるEL式によって定義されます。
ヒント: パラメータ値のEL式では、ドル記号($)が使用されます。これは、これらの式を積極的に解決し、ページのレンダリング時に結果を即座に戻すようにする必要があるためです。JSFアプリケーションのほとんどのEL式ではハッシュ記号(#)が使用され、モデルの準備ができてから値がアクセスされるように式の評価が遅延されます。 |
概要エディタの項目(または構造ウィンドウの関連付けられたノード)をクリックすると、プロパティ・インスペクタを使用してその項目の属性値を表示および編集したり、「ソース」タブをクリックしてXMLソースを直接編集できます。例13-5は、図13-15に示すページ定義ファイルを要約したXMLコードを示しています。
例13-5 ページ定義ファイル
<pageDefinition xmlns="http://xmlns.oracle.com/adfm/uimodel" version="11.1.1.44.61" id="myOrdersPageDef" Package="oracle.fodemo.storefront.pageDefs" EnableTokenValidation="false"> <parameters/> <executables> <page path="oracle.fodemo.storefront.pageDefs. templates_StoreFrontTemplatePageDef" id="pageTemplateBinding"/> <iterator Binds="MyOrderItems" RangeSize="25" DataControl="StoreServiceAMDataControl" id="MyOrderItemsIterator"/> <iterator Binds="MyOrders" RangeSize="-1" DataControl="StoreServiceAMDataControl" id="MyOrdersIterator"/> . . . </executables> <bindings> <action id="Commit" InstanceName="StoreServiceAMDataControl" DataControl="StoreServiceAMDataControl" RequiresUpdateModel="true" Action="commitTransaction"/> <action id="Rollback" InstanceName="StoreServiceAMDataControl" DataControl="StoreServiceAMDataControl" RequiresUpdateModel="false" Action="rollbackTransaction"/> <methodAction id="executeMyOrdersForCustomerVO" RequiresUpdateModel="true" Action="invokeMethod" MethodName="executeMyOrdersForCustomerVO" IsViewObjectMethod="false" DataControl="StoreServiceAMDataControl" InstanceName="StoreServiceAMDataControl.dataProvider"/> <tree IterBinding="MyOrdersIterator" id="MyOrders"> <nodeDefinition DefName="oracle.fodemo.storefront.store.queries.OrdersVO"> <AttrNames> <Item Value="OrderId"/> <Item Value="OrderDate"/> <Item Value="OrderShippedDate"/> <Item Value="OrderStatusCode"/> <Item Value="OrderTotal"/> <Item Value="CustomerId"/> <Item Value="ShipToName"/> <Item Value="ShipToAddressId"/> <Item Value="ShipToPhoneNumber"/> <Item Value="ShippingOptionId"/> <Item Value="PaymentOptionId"/> <Item Value="CalculatedOrderTotal"/> <Item Value="TotalShippingCost"/> <Item Value="DiscountAmount"/> <Item Value="InvoiceTotal"/> <Item Value="LastUpdateDate"/> <Item Value="TypedCouponCode"/> </AttrNames> </nodeDefinition> </tree> <attributeValues IterBinding="MyOrdersIterator" id="OrderDate1"> <AttrNames> <Item Value="OrderDate"/> </AttrNames> </attributeValues> <attributeValues IterBinding="MyOrdersIterator" id="OrderId1"> <AttrNames> <Item Value="OrderId"/> </AttrNames> </attributeValues> . . . </bindings> </pageDefinition>
ページ定義ファイルを使用して、特定のUIコンポーネントに対するバインディングを定義および編集する方法は、後の章で説明します。ページ定義ファイルで使用できるすべての要素および属性の説明は、A.8項「pageNamePageDef.xml」を参照してください。
UIコンポーネントをデータ・コントロールのオブジェクトにバインドする場合に使用するBindingsバインディング・オブジェクトは3種類あります。
値: イテレータ・バインディングを参照してUIコンポーネントにデータを表示します。データ・コントロールからデータを表示するページ上の個別UIコンポーネントは、それぞれ値バインディング・オブジェクトにバインドされます。値バインディング・オブジェクトは、次のとおりです。
属性値: テキスト・フィールドをオブジェクト(属性バインディング・オブジェクトとも呼ばれます)内の特定の属性にバインドする
リスト: データ・コレクション内でリスト・アイテムを属性のすべての値にバインドします。
ツリー: 表全体をデータ・コレクションにバインドし、ツリーのルート・ノードをデータ・コレクションにバインドすることもできます。
ボタン(boolean): チェック・ボックスを属性のブール値にバインドします。
グラフ: グラフを直接ソース・データにバインドします。
メソッド・アクション: ボタンやリンクなどのコマンド・コンポーネントをデータ・コントロール上のカスタム・メソッドにバインドします。メソッド・アクション・バインディング・オブジェクトは、メソッドの起動方法およびメソッドが取得するパラメータ(該当する場合)の詳細をカプセル化します。
アクション: ボタンやリンクなどのコマンド・コンポーネントを組込みデータ・コントロール操作(CommitやRollbackなど)または組込みコレクションレベル操作(Create、Delete、Next、Previousなど)にバインドします。
バインディング・オブジェクトは、ページ上のUIコントロールで機能するため、コントロール・バインディング・オブジェクトと総称されます。
例13-6は、bindings
要素の例を示しています。ここでは、Commit
というアクション・バインディングを1つ、PaymentOptionID1
というテキスト・フィールドの属性バインディングを1つ、およびPaymentTypeCode
というリスト・バインディングを1つ定義しています。
例13-6 ページ定義ファイルのbindings要素
<bindings> <action id="Commit" InstanceName="StoreServiceAMDataControl" DataControl="StoreServiceAMDataControl" RequiresUpdateModel="true" Action="commitTransaction"/> <attributeValues IterBinding="PaymentOptionsForUserIterator" id="PaymentOptionId1"> <AttrNames> <Item Value="PaymentOptionId"/> </AttrNames> </attributeValues> <list IterBinding="PaymentOptionsForUserIterator" id="PaymentTypeCode" Uses="LOV_PaymentTypeCode" StaticList="false"> <AttrNames> <Item Value="PaymentTypeCode"/> </AttrNames> </list> </bindings>
action要素で定義されたバインディング・オブジェクトは、StoreServiceAMDataControl
データ・コントロールにある組込みcommit
操作を起動するために必要な情報をカプセル化します。RequiresUpdateModel
属性のtrue
の値は、操作を実行する前にモデル・レイヤーを更新する必要があることを指定します。
この操作により、コンテキスト・イベントが発生した場合、イベント定義も表示されます。イベントを使用するバインディングがページに含まれている場合、イベント・マッピングも同様に表示されます。
attributeValues
要素は、ページ上のテキスト・フィールドに対して値バインディングを定義します。例では、PaymentOptionId1
属性バインディングによりPaymentOptionId
の値が表示され、この値がAttrNames
要素に定義されます。IterBinding
属性は、テキスト・フィールドに表示されるデータを管理するイテレータ・バインディングを参照します(詳細は、13.7.2.2項「ページ定義ファイルで定義されるExecutablesバインディング・オブジェクト」を参照してください)。
PaymentTypeCode
要素により、PaymentOptions
ビュー・オブジェクト上で作成されたLOVにアクセスして支払いタイプ・コードのリストを表示するために使用される、リスト・バインディングが定義されます。ビュー・オブジェクトのLOVを使用したリスト作成の詳細は、第30章「データバインドされた選択リストおよびシャトルの作成」を参照してください。
Executablesバインディング・オブジェクトは7種類あります。
イテレータ: ビュー・オブジェクト・コレクション全体で反復処理するイテレータにバインドします。ページで使用されるコレクションごとに1つのイテレータ・バインディングがあります。ページ上のすべての値バインディングはイテレータ・バインディングを参照して、実行時にデータを伴って移入されたコンポーネント値を含む必要があります。
コレクションまたはコレクションの属性をページ上にドロップすると、イテレータ・バインディングが自動的に実行可能ファイルとして追加されます。イテレータ・バインディング・オブジェクトは、基礎となるADFのRowSetIterator
オブジェクトにバインドされます。このオブジェクトは現在のオブジェクトと現在の範囲情報を管理します。イテレータ・バインディングは、そのページで使用されている他のバインディング・オブジェクトに、現在のオブジェクトと範囲状態を公開します。
デフォルトでは、イテレータ・バインディングは、送信されたデータ変更を、そのデータがコミットされてデータソースに戻されるまでキャッシュするように構成されます。データ変更が送信されると、イテレータに関連付けられたバインディングを持つページ上のすべてのコンポーネントがリフレッシュされ、変更されたデータが表示されます。詳細は、25.2.1項「部分ページ・レンダリングおよびイテレータ・バインディングについて」を参照してください。
イテレータの範囲は、そのページに表示する現在のオブジェクト・セットを表します。現在の範囲内の最大オブジェクト数は、イテレータのrangeSize
属性で定義されています。たとえば、データ・コントロール内のコレクションに製品が含まれており、イテレータ範囲が25の場合は、コレクション内の最初の25の製品がページ上に表示されます。ユーザーがスクロール・ダウンすると、次の25製品が表示されます。ユーザーがスクロール・アップすると、前の25製品が表示されます。ビュー・オブジェクトで範囲ページ移動を使用している場合は、イテレータ・バインディングで範囲セットを一度に戻すように設定できます。詳細は、42.1.5項「範囲ページ移動を使用した大きい結果セットの効率的なスクロール」を参照してください。
注意: ページが2ページあり、それぞれイテレータ・バインディングが同じビュー・オブジェクトのイテレータにバインドされている(たとえば、異なる2ページに同じコレクションをドロップした)場合、両方のページのイテレータ・バインディングで |
メソッド・イテレータ:データ・コントロールでカスタム・メソッドによって戻されるコレクション全体で反復処理するイテレータにバインドします。
メソッド・イテレータ・バインディングは、常にメソッド・アクション・バインディング・オブジェクトに関連しています。メソッド・アクション・バインディングは、メソッドの起動方法およびメソッドが取得するパラメータ(該当する場合)の詳細をカプセル化します。メソッド・アクション・バインディング自体がメソッド・イテレータにバインドされ、データが提供されます。
データ・コントロールのカスタム・メソッドから、メソッド戻りコレクションまたはメソッド戻りコレクションの属性をページ上にドロップする場合のみ、メソッド・イテレータのExecutablesバインディング・オブジェクトが表示されます。アプリケーション・モジュール・データ・コントロールのみを使用する場合、イテレータ・バインディング・オブジェクトのみが表示されます。
変数イテレータ:バインディング・コンテナ内のすべての変数を他のバインディングに公開するイテレータにバインドします。コレクションごとにイテレータ・バインディングがありますが、1ページで使用されているすべての変数には、1つの変数イテレータ・バインディングしかありません。(変数イテレータは、バインディング・コンテナ変数を属性として持つ、単一のデータ・オブジェクトだけが含まれたコレクションを指すイテレータのようなものです。)
ページの変数は、バインディング・コンテナに対してローカルであり、バインディング・コンテナ・オブジェクトが存在する間のみ存在します。ページから収集したパラメータが要求されるデータ・コントロール・メソッドまたはデータ・コントロール操作を使用する際には、JDeveloperによって、ページ定義ファイル内のパラメータの変数が自動的に定義されます。属性バインディングは、ページ変数を参照できます。
変数イテレータには、variable
およびvariableUsage
の2種類の変数のうち1つを含むことができます。variable
タイプ変数は単純な値ホルダーですが、variableUsage
タイプ変数は、ビュー・オブジェクトの名前付きバインド・パラメータに関連する値ホルダーです。変数をvariableUsage
タイプとして定義すると、バインドされるビュー・オブジェクトの名前付きバインド変数からデフォルト値やUIコントロール・ヒントを継承できるようになります。
起動アクション: ページ・ライフサイクルの任意のフェーズ中に、アクション・バインディングまたはメソッド・アクション・バインディングで定義された操作またはメソッドを起動するメソッドにバインドします。
ヒント: ページがレンダリングされる前にメソッドを実行する必要がある場合は、ページ定義ファイルの起動アクションではなく、タスク・フローのメソッド・コール・アクティビティを使用してメソッドを起動する必要があります。メソッド・コール・アクティビティを使用すると、ページ・ロジックの起動が簡単になり、タスク・フローに多くの情報を表示できるため、ダイアグラムの読取りが容易になり、使用しやすくなります。ただし、ページのライフサイクルの複数のフェーズでメソッドを実行する必要がある場合や、ページおよびページ定義ファイルを再利用して、メソッドをページに関連付ける場合、またはアプリケーションでADFを使用しない場合は、起動アクションを使用してメソッドを起動する必要があります。 |
ページ: テンプレートのページ定義ファイルにバインドします(テンプレートを使用している場合)。テンプレートを使用した作業の詳細は、24.2項「ページ・テンプレートの使用」を参照してください。
注意: ページ要素を使用して別のページ定義ファイルにバインドすることもできます。ただし、実行時には、現在の受信ページ(レンダリングされたページが受信ページと異なる場合は、レンダリングされたページ)のバインディング・コンテナのみが、現在のリクエスト中にフレームワークにより自動的に作成されます。したがって、現在のページから別のページのバインド値にアクセスするには、(たとえば、バッキングBeanを使用して)現在のリクエストにそのページのバインディング・コンテナをプログラムで作成する必要があります。作成しない場合、そのページのバインド値は利用できなくなるか、現在のリクエストで有効にできません。 |
検索するリージョン: 検索が実行できるよう、名前付き基準をイテレータにバインドします。
タスク・フロー: リージョンのタスク・フローのバインディング・コンテナをインスタンス化します。
複数タスク・フロー: リージョンのタスク・フローのバインディング・コンテナを、タスク・フローの配列からインスタンス化します。これは、不明な数のリージョンを含むページで役立ちます。たとえば、panelTabbed
コンポーネントの各タブがリージョンで、ユーザーが実行時にタブを追加および削除できるような場合です。詳細は、21.10項「複数の不明なリージョンをレンダリングするページの構成」を参照してください。
実行時には、ExecutableバインディングはそのRefresh
属性の値に基づいてリフレッシュされます。イテレータ・バインディングをリフレッシュすると、そのバインディングの基礎となるRowSetIterator
オブジェクトにバインディングを再接続します。起動アクション・バインディングをリフレッシュすると、アクションが起動されます。バインディングをリフレッシュする前に、ADFランタイムにより、実行可能ファイルで指定されたRefresh
属性およびRefreshCondition
属性がすべて評価されます。Refresh
属性は、実行可能ファイルが起動されるADFライフサイクル・フェーズを指定します。RefreshCondition
属性は、実行可能ファイルが起動される条件を指定します。ブールEL式を使用して、RefreshCondition
値を指定できます。RefreshCondition
属性を空白のままにする場合は、true
と評価されます。
デフォルトでは、Refresh
値はdeferred
に設定されています。これは、バインディングが(たとえば、JSFページのEL式から)アクセスされないかぎり実行されないことを意味します。バインディングがコールされると、バインディングのパラメータ値が変更されるか、バインディング自体が変更されないかぎり再実行されません。
バインディングのリフレッシュ方法と、Refresh
属性およびRefreshCondition
属性の設定方法の詳細は、25.2項「JSFページ・ライフサイクルとADFページ・ライフサイクルについて」を参照してください。
例13-7は、Executablesバインディング・オブジェクトの例を示しています。
例13-7 ページ定義ファイルのExecutablesバインディング・オブジェクト
<executables> <page path="oracle.fodemo.storefront.pageDefs. templates_StoreFrontTemplatePageDef" id="pageTemplateBinding"/> <iterator Binds="MyOrderItems" RangeSize="25" DataControl="StoreServiceAMDataControl" id="MyOrderItemsIterator"/> <iterator Binds="MyOrders" RangeSize="-1" DataControl="StoreServiceAMDataControl" id="MyOrdersIterator"/>
ページ上にMyOrderItems
コレクションを表としてドロップすることにより、MyOrderItems
という名前のイテレータ・バインディングが作成されました。MyOrders
コレクションをドロップすることにより、MyOrders
という名前のイテレータ・バインディングが作成されました。これはMyOrderItems
コレクションとマスター/ディテールの関係にあります。詳細は、第29章「マスター/ディテール・データの表示」を参照してください。
iterator
要素のBinds
属性により、イテレータが反復処理するコレクションが定義されます。RangeSize
属性により、イテレータが一度にページ上に表示するオブジェクトの数が定義されます。RangeSize
の値が-1
の場合、イテレータはコレクション内のすべてのオブジェクトを表示します。
ヒント: 通常、イテレータ・バインディングのデフォルト・レンジ・サイズは25です。ただし、イテレータ・バインディングが「リスト・バインディングの編集」ダイアログから作成される場合、そのレンジ・サイズは |
パフォーマンスに関するヒント: イテレータがADF Business Componentsレイヤーのビュー・オブジェクトからデータ・オブジェクトをフェッチするために必要なラウンドトリップの回数を減らすには、 |
データ・モデルからのデータを表示するため、WebページのUIコンポーネントは、JSF式言語(EL)式を使用してバインディング・オブジェクトにバインドされます。EL式は、バインディング・コンテナ内の特定のバインディング・オブジェクトを参照します。実行時に、JSFランタイムはEL式を評価し、ページ表示の際にコンポーネントにデータを移入するバインディング・オブジェクトから値を取得します。ユーザーがUIコンポーネントでデータを更新する場合、JSFランタイムは同じEL式に基づいて、対応するバインディング・オブジェクトに値を戻します。
ヒント: マネージドBean内でEL式を使用する必要が生じる場合があります。マネージドBean内でのEL式の使用の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』の「EL式の作成」の項を参照してください。 |
「データ・コントロール」パネルを使用してコンポーネントを作成すると、ADFデータ・バインディング式が自動的に作成されます。この式は、バインディング・オブジェクトのデータを表示するか、バインディング・オブジェクトのプロパティを参照する、すべてのコンポーネント属性に追加されます。事前作成済のそれぞれの式は、ページ定義ファイルで定義された、適切なバインディング・オブジェクトを参照します。これらのバインディング式は編集可能ですが、ADFバインディング式の基本構文に従っていれば、独自に作成することもできます。ADFデータ・バインディング式は、バインディング・オブジェクトからのデータを移入する任意のコンポーネント属性に追加できます。
JSFページの一般的なADFデータ・バインディングEL式は、次の構文を使用して、バインディング・コンテナ内のタイプの異なるバインディング・オブジェクトを参照します。
#{bindings.BindingObject.propertyName}
説明:
bindings
は、式によって参照されているバインディング・オブジェクトが現在のページのバインディング・コンテナにあることを識別する変数です。すべてのADFデータ・バインディングEL式は、bindings
変数で始まる必要があります。
BindingObject
は、ページ定義ファイルで定義される、バインディング・オブジェクトのID、または属性については名前です。バインディングobjectID
または名前は、そのページ定義ファイル内で一意なものです。EL式は、パラメータ・バインディング、実行可能バインディングまたは値バインディングなど、ページ定義ファイル内のどのバインディング・オブジェクトでも参照できます。
propertyName
は、各データバインドUIコンポーネントのデフォルトの表示方法を決定し、実行時のバインディング・オブジェクトのプロパティを設定する変数です。各タイプのバインディング・オブジェクトに対して、異なるバインディング・プロパティがあります。バインディング・プロパティの詳細は、13.8.2項「ADFバインディング・プロパティについて」を参照してください。
たとえば、JSFページに表示される次の式を例にしてみます。
#{bindings.ProductName.inputValue}
bindings
変数は、現在のページのバインディング・コンテナでバインドされた値を参照します。参照されているバインディング・オブジェクトはProductName
であり、これは属性バインディング・オブジェクトです。バインディング・プロパティはinputValue
で、最初のProductName
属性の値を戻します。
ヒント: ページ定義ファイルのバインディング式ではドル記号( |
前述のように、「データ・コントロール」パネルを使用してUIコンポーネントを作成する場合、これらの式が組み込まれます。ただし、必要に応じて手動で式を作成することもできます。JDeveloperの式ビルダーは、UIコンポーネントがバインドされるその他の有効なオブジェクトに加え、ページ定義ファイルに定義されたバインディング・オブジェクトのリストを提供することにより、EL式の構築を支援するダイアログです。また、ADFバインディング・オブジェクトの階層リストやADFバインディング・オブジェクトの最も一般的に使用されるプロパティが提供されるため、ADFデータバインド式の作成や編集に特に便利です。バインディング・プロパティの詳細は、13.8.2項「ADFバインディング・プロパティについて」を参照してください。
ビジュアル・エディタで項目を選択し、プロパティ・インスペクタを使用して特定の属性についてEL式を作成できます。
プロパティ・インスペクタから式ビルダーを開く手順:
構造ウィンドウまたはビジュアル・エディタでUIコンポーネントを選択します。
「プロパティ・インスペクタ」で、フィールドの隣のドロップダウン・リストをクリックし、「式ビルダー」を選択します。
式ビルダーを開いたら、これを使用してEL式を作成できます。
作業を始める前に、次のようにします。
ADFモデル・レイヤーを使用する際に、EL式の作成方法に関する知識があると役立つ場合があります。詳細は、13.8項「ADFデータバインディングEL式の作成」を参照してください。
式ビルダーの使用手順:
「式ビルダー」ダイアログを開きます。
式ビルダーの次の機能を使用して、ADFバインディング式を編集または作成します。
変数ツリーを使用して、バインディング式に含める項目を選択します。ツリーには階層形式のバインディング・オブジェクトが含まれます。ツリーの各アイコンは、式で使用できる様々なタイプのバインディング・オブジェクトを表します(各アイコンの説明は、表13-3を参照してください)。
ツリーを絞り込むには、ドロップダウン・フィルタを使用するか、検索フィールドに検索基準を入力します。ツリー内の項目をダブルクリックし、「式」ボックスに移動します。
演算子ボタンを使用して、論理演算子または数値演算子を式に追加します。
ヒント: また、「式」ボックスに直接式を入力することもできます。 |
表13-3 式ビルダーの「ADFバインディング」ノードの下にあるアイコン
アイコン | 説明 |
---|---|
|
現在のページのバインディング・コンテナを参照する、 |
|
バインディング・コンテキスト全体を参照する、 |
|
アクション・バインディング・オブジェクトを表します。このアイコンを使用するノードを開くと、有効なアクション・バインディング・プロパティのリストが公開されます。 |
|
イテレータ・バインディング・オブジェクトを表します。このアイコンを使用するノードを開くと、有効なイテレータ・バインディング・プロパティのリストが公開されます。 |
|
属性バインディング・オブジェクトを表します。このアイコンを使用するノードを開くと、有効な属性バインディング・プロパティのリストが公開されます。 |
|
リスト・バインディング・オブジェクトを表します。このアイコンを使用するノードを開くと、有効なリスト・バインディング・プロパティのリストが公開されます。 |
|
表バインディング・オブジェクトまたはツリー・バインディング・オブジェクトを表します。このアイコンを使用するノードを開くと、有効な表バインディング・プロパティおよびツリー・バインディング・プロパティのリストが公開されます。 |
|
ADFバインディング・オブジェクト・プロパティを表します。ADFプロパティの詳細は、 13.8.2項「ADFバインディング・プロパティについて」を参照してください。 |
|
パラメータ・バインディング・オブジェクトを表します。 |
|
JavaBeanを表します。 |
|
メソッドを表します。 |
式ビルダーを使用してデータバインドされたコンポーネントを作成すると、EL式によって、特定のADFバインディング・プロパティが参照される場合があります。実行時には、これらのバインディング・プロパティによって、データバインドUIコンポーネントのデフォルトの表示方法や、イテレータ・バインディング固有のパラメータなどが定義されます。ADFバインディング・プロパティは、Oracle APIによって定義されます。各バインディング・タイプで使用できるプロパティの完全なリストは、付録B「ADFバインディング・プロパティ」を参照してください。
特定のプロパティに割り当てられる値は、ページ定義ファイルで定義されます。たとえば、イテレータ・バインディングには、イテレータが一度に表示する行数を指定する、RangeSize
というプロパティがあります。例13-8のように、RangeSize
に割り当てられる値は、ページ定義ファイルで指定されます。
「データ・コントロール」パネルを使用すると、バインドされたコンポーネントを1回のドラッグ・アンド・ドロップ・アクションで設計および作成できますが、基本的なUIコンポーネントを先に作成して後からバインディングを追加した方がよい場合があります。たとえば、ページで宣言的なコンポーネントが使用されている場合、まず宣言的なコンポーネントをドロップしてから正しいADFコントロールにバインドする必要があります。宣言的なコンポーネントは、他のADF Facesコンポーネントで構成された再利用可能な複合UIコンポーネントです。プロジェクトにインポートされた宣言的なコンポーネントは、標準のADF Facesコンポーネントと同様に、コンポーネント・パレットからページにドロップできます。宣言的なコンポーネント全体ではADFデータ・バインディングは使用できませんが、宣言的なコンポーネントが一旦ページにドロップされると、宣言的なコンポーネントを構成する個々のコンポーネントのADFデータ・バインディングを使用できます。宣言的なコンポーネントの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』の「宣言コンポーネントの使用」の項を参照してください。
注意: 最終的にページのUIコンポーネントでADFデータ・バインディングが使用されることがわかっていても、データ・コントロールの準備ができる前にページを開発する必要がある場合、手動でコンポーネントをバインドするのではなく、プレースホルダ・データ・コントロールを使用します。プレースホルダ・データ・コントロールを使用すると、開発済データ・コントロールを使用した場合と同じ宣言的な開発が行われます。詳細は、第17章「プレースホルダ・データ・コントロールによるページの設計」を参照してください。 |
Webページの設計時に、ADFバインディングは特定のADF Facesタグまたはそれに相当するJSF HTMLタグにしか追加できないことに留意してください。表13-4に、後からADFバインディングを追加できるADF FacesおよびJSFのタグを示します。
ヒント: JSFの参照実装UIコンポーネント・タグをADFバインディングとともに使用できるようにするには、プロジェクト・プロパティの「ADFビュー設定」で「JSFデータ・バインディングにJSF HTMLウィジェットを含む」オプションを選択する必要があります。しかし、ADF Facesタグを特にADFバインディングとともに使用すると、JSFの参照実装タグを使用するときより優れた機能を発揮します。 |
表13-4 ADFバインディングに使用できるタグ
ADFバインディングで使用されるADF Facesタグ | 相当するJSF HTMLタグ |
---|---|
テキスト・フィールド |
|
af:i |
|
|
|
|
|
|
該当なし |
表 |
|
|
|
アクション |
|
|
|
|
|
|
該当なし |
|
該当なし |
選択リスト |
|
|
該当なし |
|
|
|
|
|
|
|
h:selectBooleanCheckbox |
問合せ |
|
|
該当なし |
|
該当なし |
ツリー |
|
|
該当なし |
|
該当なし |
バインディングをUIコンポーネントに追加する前に、次のガイドラインを実行します。
JSF JSPの作成ウィザードでJSFページを作成する場合は、「マネージドBean」タブの「マネージドBeanでUIコンポーネントを自動公開しない」オプションを選択します。
このオプションにより、偶発的なプログラム操作に応じてページ内のすべてのUIコンポーネントを対応するバッキングBeanのプロパティに自動的に関連付ける、JDeveloperの自動バインディング機能が無効になります。ADFバインディングをページに追加する場合、自動バインディング機能を使用しないことをお薦めします。自動バインディング機能を使用すると、後で、ADFバインディングを追加した後にマネージドBeanのバインディングを削除する必要があります。マネージドBeanのUIコンポーネント・プロパティのバインディングがADFバインディングに影響を及ぼすことはありませんが、JSFコードに存在するとわかりにくくなります。マネージドBeanの詳細は、24.4項「Fusion WebアプリケーションでのマネージドBeanの使用」を参照してください。
ADF Facesのタグ・ライブラリを追加します。
ADFバインディングをJSFコンポーネントに追加できますが、ADF Facesコンポーネントの方が、特にADFバインディングと組み合せる場合には優れた機能を発揮します。
構造ウィンドウを使用して、ADF Modelバンディングをコンポーネントに適用します。
ADF Modelデータ・バインディングを適用する手順:
ビジュアル・エディタの「設計」ページで、ADFバインディングを追加するUIコンポーネントを選択します。
コンポーネントは、表13-4に示すタグのいずれかである必要があります。コンポーネントをビジュアル・エディタで選択すると、図13-16に示すように、構造ウィンドウのそのコンポーネント・タグが同時に選択されます。
構造ウィンドウで、UIコンポーネントを右クリックし、ポップアップ・メニューで「ADFコントロールにバインド」を選択します。
注意: 「ADFコントロールにバインド」メニュー・オプションが表示されるには、プロジェクトにすでにデータ・コントロールが含まれている必要があります。データ・コントロールが含まれていない場合は、第17章「プレースホルダ・データ・コントロールによるページの設計」で説明しているように、プレースホルダ・データ・コントロールを使用する必要があります。 |
「ADFコントロールにバインド」ダイアログで、UIコンポーネントをバインドするデータ・コントロールを選択します。選択されたUIコンポーネントと互換性がないコントロールを選択すると、JDeveloperにより通知されます。
「データ・コントロール」パネルを使用する場合、13.4.2項「「データ・コントロール」パネルの使用時の処理」で説明しているように、必要なADFオブジェクトはすべて自動的に作成されます。