ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド
11gリリース1(11.1.1.6.0)
B52028-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

12Fusion WebアプリケーションでのADF Modelの使用

この章では、ADFアプリケーション・モジュールのデータ・モデルおよびビジネス・サービス・インタフェース・メソッドが、設計時にデータバインディングのドラッグ・アンド・ドロップ用にどのように表示されるか、実行時にアプリケーション・モジュールのデータ・コントロールを使用してADF Modelデータバインディング・レイヤーからどのようにアクセスできるか、および開発者がどのように「データ・コントロール」パネルを使用してデータバインドされたページを作成するかについて説明します。

この章の内容は次のとおりです。

12.1 ADFデータ・バインディングの概要

ADFモデルによって、ユーザー・インタフェース・テクノロジとビジネス・サービス実装の分離を可能にする概念(データ・コントロール宣言的バインディング)が実装されます。

データ・コントロールでは、関連するプロパティ、メソッド、タイプの情報を含め、サービスの操作とデータ・コレクションを表す標準のメタデータ・インタフェースを使用してビジネス・サービスの実装技術を抽象化します。ビジネス・コンポーネントを使用するアプリケーションでは、アプリケーション・モジュール作成時に自動的にデータ・コントロールが作成され、データ・コントロールにはアプリケーション・モジュールの全機能が含まれます。開発者は、JDeveloperの「データ・コントロール」パネルに表示されたデータ・コントロールの表現を使用して、アプリケーション・モジュールに自動的にバインドされるUIコンポーネントを作成できます。実行時に、ADF MODELレイヤーによって、適切なXMLファイルからデータ・コントロールおよびバインディングを記述した情報が読み取られ、ユーザー・インタフェースとビジネス・サービスの双方向の結合が実装されます。

宣言的なバインディングによって、データ・コントロール内のデータ・コレクションからのデータ・アクセスの詳細と、その操作の実行が抽象化されます。宣言的なバインディング・オブジェクトには、次の3つの基本的な種類があります。

図12-1は、バインディングによりUIコンポーネントをデータ・コントロールのコレクションとメソッドに関連付ける様子を示しています。

図12-1 バインディングによるデータ・コントロールへのUIコンポーネントの関連付け

ボタンとフィールドでは、データ・コントロールへのバインディングが使用されています

ページのUIコンポーネントをサポートするバインディングのグループは、ページ定義ファイルというページ固有のXMLファイルに記述されます。ADF Modelレイヤーでは実行時にこのファイルが使用され、ページのバインディングがインスタンス化されます。これらのバインディングは、 バインディング・コンテナと呼ばれるリクエスト・スコープ・マップに保持され、EL式#{bindings}を使用して各ページ・リクエスト中にアクセスできます。この式により、現在のページのバインディング・コンテナが常に評価されます。

「データ・コントロール」パネルから項目をドラッグし、それを特定のUIコンポーネントとしてページ上にドロップすることで、データバインドされたユーザー・インタフェースを設計できます。データ・コントロールを使用してUIコンポーネントを作成すると、そのコンポーネントを選択したデータ・コントロールにバインドするために必要な、様々なコードおよびオブジェクトがJDeveloperによって自動的に作成されます。


注意:

ADF Modelレイヤーを使用してビジネス・サービスへのアクセスを実行すると、ビューとビジネス・サービスは同期を維持します。たとえば、データ・コントロール参照をアプリケーション・モジュール・インスタンスにクラス・キャストして、メソッドを直接コールすることにより、アプリケーション・モジュール上でメソッドをコールできますが、モデル・レイヤーがバイパスされ、変更が行われた場合でもモデル・レイヤーでは認識されなくなります。

12.2項「ADFデータ・コントロールを使用したアプリケーション・モジュールの公開」

アプリケーション・モジュールのデータ・コントロールは、リクエスト開始時に使用可能なアプリケーション・モジュール・インスタンスを自動的に取得するアプリケーション・モジュール・プールのシン・アダプタです。現在のリクエスト中に、アプリケーション・モジュールのデータ・コントロールにより、現在のユーザー・セッションのかわりに、アプリケーション・モジュール・インスタンスへの参照が保持されます。リクエスト終了時に、インスタンスは、データ・コントロールによって解放され、プールに戻されます。ここで重要なことは、データ・コレクション、組込み操作およびサービス・メソッドに対してバインディング・オブジェクトが求めるインタフェースを、アプリケーション・モジュール・コンポーネントが直接実装することです。最適化されたこのような相互作用により、バインディングが次のように直接、データ・モデル内のアプリケーション・モジュール・インスタンスに作用します。

図12-2は、アプリケーション・モジュールのデータ・コントロールが課すプール管理ロールを示し、バインディングとアプリケーション・モジュール・インスタンスの間の直接リンクを説明しています。

図12-2 バインディングによるプールからアプリケーション・モジュールのビュー・オブジェクトおよびメソッドへの直接接続

バインディングによるプールの操作方法の図

12.2.1 「データ・コントロール」パネルでのアプリケーション・モジュールのデータ・コントロールの表示

「データ・コントロール」パネルで、アイコンをパネルからページのビジュアル・エディタにドラッグ・アンド・ドロップして、データバインドされたHTML要素(JSPページ用)、およびデータバインドされたUIコンポーネント(JSF JSPページ用)を作成します。図12-3は、StoreFrontモジュールのデータ・コントロールを表示する「データ・コントロール」パネルを示しています。

図12-3 JDeveloperの「データ・コントロール」パネル

JDeveloperの「データ・コントロール」パネル

「データ・コントロール」パネルでは、アプリケーションのビジネス・サービスに対して作成されたすべてのデータ・コントロールがリストされます。また、UIコンポーネントへのバインドに使用できるコレクション(データ・オブジェクトの行セット)、メソッドおよび組込み操作がすべて公開されます。


注意:

それらを公開するようにJDeveloperを構成している場合は、ビュー・リンク・アクセッサの戻り値も表示されます。詳細は、5.6項「マスター/ディテール階層における複数表の使用」を参照してください。アクセッサ・メソッドの表示は次の手順で行います。
  1. JDeveloperのメイン・メニューから、「ファイル」→「プリファレンス」を選択します。

  2. 「データ・コントロール」パネルのノードを選択します。

  3. 「基礎なるアクセッサ・ノードの表示」を選択して、チェック・ボックスをアクティブにします。


たとえば、ビジネス・サービスを定義するためにADF Business Componentsを使用するアプリケーションでは、「データ・コントロール」パネル上の各データ・コントロールは特定のアプリケーション・モジュールを表し、そのアプリケーションのデータ・モデルでビュー・オブジェクト・インスタンスを公開します。データ・コントロール内のオブジェクトの階層は、アプリケーション・モジュール・データ・モデル用に追加されているビュー・オブジェクト間のビュー・リンクによって定義されます。ビュー・オブジェクトとビュー・リンクの作成の詳細は、第5章「ビュー・オブジェクトを使用したSQL問合せの定義」を、データ・モデルへのビュー・リンクへの追加の詳細は、5.6.4項「データ・モデルでアクティブなマスター/ディテール調整を有効化する方法」を参照してください。


ヒント:

関連付けられたデータ・コントロール・オブジェクトを右クリックして、「定義の編集」を選択すると、ビュー・オブジェクトの概要エディタを開くことができます。

たとえば、StoreServiceAMDataControlアプリケーション・モジュールによりStoreFrontモジュール・アプリケーションのビジネス・サービス・レイヤーが実装されます。このデータ・モデルには、複数のマスター/ディテール階層など、多数のビュー・オブジェクト・インスタンスが含まれています。ADFサンプル・アプリケーションのビュー・レイヤーはJSFページで構成され、このページのUIコンポーネントは、StoreServiceAMDataControlのデータ・モデル内のビュー・オブジェクト・インスタンスのデータと、そのクライアント・インタフェース上の組込み操作およびサービス・メソッドにバインドされています。

12.2.1.1 「データ・コントロール」パネルでのデータ・モデルおよびサービス・メソッドの表示

各ビュー・オブジェクト・インスタンスは、ビュー・オブジェクト・インスタンス名と対応する名前が付いたデータ・コレクションとして表示されます。図12-4は、 StoreServiceAMDataControlのデータ・モデルのビュー・オブジェクト・インスタンスが「データ・コントロール」パネルでどのように表示されるかを示しています(ビューを簡略化するために、この図では各ビュー・オブジェクトに対して表示される詳細を省略しています)。「データ・コントロール」パネルは、マスター・データ・コレクションの下にネストされたディテール・データ・コレクションを表示することで、アプリケーション・モジュールのデータ・モデル内のマスター/ディテール階層を示します。

「データ・コントロール」パネルは、アプリケーション・モジュールのクライアント・インタフェース上の各カスタム・メソッドも、メソッド名と対応する名前が付いたデータ・コントロール・カスタム操作として表示します。メソッドが引数を受け入れると、その引数は、操作ノード内にネストされた操作パラメータとして「パラメータ」ノードに表示されます。

図12-4「データ・コントロール」パネルでのデータ・モデルの表示

この図は、データ・コントロール・パレットでのデータ・モデルを示しています。

12.2.1.2 「データ・コントロール」パネルでのトランザクション制御操作の表示

アプリケーション・モジュールのデータ・コントロールでは、図12-5に示すように、CommitおよびRollback,という名前の2つのデータ・コントロールの組込み操作を公開します(データ・コントロール・ツリー内の「操作」ノードでは、ビューを簡略化するために、データ・コレクションおよびカスタム操作がすべて省略されています)。これらの操作は、実行時にデータ・バインディング・レイヤーによって起動されると、現在のアプリケーション・モジュール・インスタンスに関連付けられているTransactionオブジェクトのcommit()メソッドおよびrollback()メソッドに委譲します。


注意:

多数のビュー・オブジェクト・インスタンスおよびカスタム・メソッドがあるアプリケーション・モジュールでは、データ・コントロールの直接の子ノードである「操作」ノードを見つけるには、「データ・コントロール」パネル表示のスクロールが必要な場合があります。このノードに、その組込み操作が含まれています。

図12-5 「データ・コントロール」パネルでのトランザクション制御操作の表示

データ・コントロール・パレットに表示されたトランザクション制御操作

12.2.1.3 「データ・コントロール」パネルでのビュー・オブジェクトの表示

ビュー・オブジェクト属性は、作成したカスタム・メソッドと同様、対応するデータ・コレクションの直接の子ノードとして表示されます。図12-6は、アプリケーション・モジュールのデータ・モデル内の各ビュー・オブジェクト・インスタンスが「データ・コントロール」パネルでどのように表示されるかを示しています。いずれかのカスタム・メソッドをビュー・オブジェクトのクライアント・インタフェースに表示することを選択している場合、そのメソッドは、同じレベルのビュー・オブジェクト属性のすぐ下にカスタム・メソッドとして表示されます。メソッドが引数を受け入れると、その引数は、ネストされた「パラメータ」ノードに操作パラメータとして表示されます。

デフォルトでは、ビュー・オブジェクトで問合せ可能な各属性に対して暗黙的な表示基準が作成されます。図12-6に示すように、「名前付き基準」ノードの下に、「すべての問合せ可能な属性」として表示されます。ビュー・オブジェクトに対して作成された名前付きビュー基準は「名前付き基準」ノードの下に表示されます。View Criteria式(暗黙的および名前付きの両方)は、メソッドの戻り値として表示されます。問合せで使用される結合と基準項目、ネストされた基準(該当する場合)が子として表示されます。これらの項目を使用して、第27章「ADFによるデータバインドされた検索フォームの作成」で説明している、クイック検索フォームを作成します。

図12-6「データ・コントロール」パネルでのビュー・オブジェクトの表示

データ・コントロール・パレットでのビュー・オブジェクトの図

図12-6に示すように、データ・コレクションの下の「操作」ノードには、そのコレクションで使用可能な組込み操作がすべて表示されます。操作で1つ以上のパラメータを受け入れると、そのパラメータは、ネストされた「パラメータ」ノードに表示されます。実行時に、これらのデータ・コレクション操作の1つがデータ・バインディング・レイヤーによって名前別に起動されると、アプリケーション・モジュールのデータ・コントロールは、組込み機能を処理するViewObjectインタフェース上の適切なメソッドにそのコールを委譲します。組込み操作は、現在の行に影響を与える操作、データ・コレクションをリフレッシュする操作、および他の全操作の3つのカテゴリに分類されます。

現在の行に影響を与える操作:

  • Create: 現在の行になる新規行を作成するが、その行の挿入なし。

  • CreateInsert: 現在の行となる新規行を作成し、新規の空白行をデータソースに挿入。

  • Create with Parameters: パラメータ値を使用して新しい行を作成。取得したパラメータは識別子または構成側の親の外部キー属性の作成時刻値を提供します。これらの属性は、多相ビュー・オブジェクトと、現在のビューにリンクされた親の行で作成されていない構成される側の子のビュー・オブジェクト行の作成時にそれぞれ必要になります。多相ビュー・オブジェクトの詳細は、39.6項「ビュー・オブジェクトを使用した複数の行タイプの処理」を参照してください。

  • Delete: 現在の行を削除。

  • First: 現在の行を行セット内の最初の行に設定。

  • Last: 現在の行を行セット内の最後の行に設定。

  • Next: 行を行セット内の次の行に設定。

  • Next Set: 1つ後の行のセットに移動します。

  • Previous: 現在の行を行セット内の前の行に設定。

  • Previous Set: 1つ前の行セットに移動。

  • setCurrentRowWithKey: パラメータとして渡された行キーのシリアライズされた文字列表現を使用して行の検索を試行。検出されると、その行が現在の行になります。

  • setCurrentRowWithKeyValue: パラメータとして渡された主キーの属性値を使用して行の検索を試行。検出されると、その行が現在の行になります。

データ・コレクションをリフレッシュする操作:

  • Execute: ビュー・オブジェクトの問合せを実行または再実行してデータ・コレクションをリフレッシュ。バインド・パラメータがある場合、その値は現在の値のままになります。

  • ExecuteWithParams: パラメータとして渡された名前付きのバインド変数に新しい値を割り当てた後で、ビュー・オブジェクトの問合せを実行または再実行することにより、データ・コレクションをリフレッシュ。


注意:

executeWithParams操作は、設計時に1つ以上の名前付きバインド変数が定義されているビュー・オブジェクトの場合のみ表示されます。

他の全操作:

  • removeRowWithKey: パラメータとして渡された行キーのシリアライズされた文字列表現を使用して行の検索を試行。検出されると、その行が削除されます。

  • Find: データ・コレクションの検索モードのオンとオフの切替え。

12.2.1.4 「データ・コントロール」パネルでのネストされたアプリケーション・モジュールの表示

他のアプリケーション・モジュールのネストされたインスタンスを組み込んで複合アプリケーション・モジュールを作成すると、「データ・コントロール」パネルではこのコンポーネント・アセンブリがツリー階層で表示されます。たとえば、StoreServiceAMDataControlアプリケーション・モジュールの他に、同じパッケージに次のアプリケーション・モジュールも作成したとします。

  • ProductServiceという名前のアプリケーション・モジュールを作成し、そのデータ・コントロール名をProductServiceに変更

  • CompositeServiceという名前のアプリケーション・モジュールを作成し、そのデータ・コントロール名をCompositeServiceに変更

次に、OtherViewObjectおよびAnotherViewObjectという名前の2つのビュー・オブジェクト・インスタンスをCompositeServiceのデータ・モデルに追加し、「アプリケーション・モジュールの編集」ダイアログの「アプリケーション・モジュール」ページで、StoreServiceAMDataControlアプリケーション・モジュールのインスタンスおよびProductServiceアプリケーション・モジュールのインスタンスを追加して、これらのインスタンスをCompositeServiceの一部として再使用するとします。図12-7は、CompositeServiceが「データ・コントロール」パネルに表示される様子を示しています(わかりやすくするために、ネストされたStoreServiceAMDataControlの構造のほとんどが省略されています)。StoreServiceAMDataControlおよびProductServiceのネストされたインスタンスは、CompositeServiceデータ・コントロール内にネストされたパネル・ツリーに表示されます。ネストされたアプリケーション・モジュール・インスタンスによってクライアントに公開されるデータ・モデル全体および一連のクライアント・メソッドは、それらを再使用するCompositeServiceの一部として自動的に使用可能になります。

図12-7 「データ・コントロール」パネルでのネストされたアプリケーション・モジュールの表示

データ・コントロール・パレットでのネストされたアプリケーション・モジュールの図

StoreServiceAMDataControlおよびProductServiceのネストされたインスタンスをCompositeService内で再使用していても、StoreServiceAMDataControlおよびProductServiceアプリケーション・モジュールもパネル・ツリー内の最上位データ・コントロール・ノードとして表示されることに注意してください。JDeveloperでは、StoreServiceAMDataControlまたはProductServiceCompositeServiceから独立した個別のデータ・コントロールとして使用される場合があると想定し、この3つすべてを表示します。正しいデータ・コントロールからデータ・バインディングのドラッグ・アンド・ドロップを実行するように注意してください。CompositeServiceデータ・コントロールに集約された部分である、ネストされたStoreServiceAMDataControlインスタンスのデータ・モデルのビュー・オブジェクト・インスタンスをページで使用する場合は、必ず、パネルでCompositeServiceデータ・コントロール・ノードの一部として表示されるデータ・コレクションを選択してください。

目的の用途に応じたドラッグ・アンド・ドロップ操作をすることが重要です。パネル内のトップレベルの StoreServiceAMDataControlデータ・コントロール・ノードからデータ・コレクションをドロップすると、実行時にページ上で、StoreServiceAMDataControlコンポーネント・プールから取得したStoreServiceAMDataControlアプリケーション・モジュールのインスタンスが使用されます。CompositeServiceの一部としてネストされたStoreServiceAMDataControlのインスタンスのデータ・コレクションをドロップすると、実行時にページ上でCompositeServiceコンポーネント・プールから取得したCompositeServiceアプリケーション・モジュールのインスタンスが使用されます。各タイプのアプリケーション・モジュールのデータ・コントロールでは異なるトランザクションおよびデータベース接続が使用されるため、ネストされたアプリケーション・モジュールと最上位のデータ・コントロールの両方から不適切にデータ・コレクションを組み合せると、実行時に予期せぬ動作が発生します。

12.2.2 「データ・コントロール」パネルの表示方法

「データ・コントロール」パネルは、JDeveloperの最上部左側にあるアプリケーション・ナビゲータにあります。コンテンツを表示するには、パネル・ヘッダーをクリックしてパネルを展開します。パネル・ヘッダーを表示しないと、アプリケーション・ナビゲータが表示されない場合があります。

アプリケーション・ナビゲータおよび「データ・コントロール」パネルを表示する手順:

  1. メイン・メニューから、「表示」→「アプリケーション・ナビゲータ」を選択します。

  2. 「データ・コントロール」アコーディオン・パネルを開くには、図12-8に示す「データ・コントロール」ヘッダーの展開アイコンをクリックします。

    図12-8 「アプリケーション・ナビゲータ」の「データ・コントロール」パネル

    「アプリケーション・ナビゲータ」の「データ・コントロール」パネル

12.2.3 「データ・コントロール」パネルのリフレッシュ方法

アプリケーション・モジュールまたは基礎となるサービスが変更されたら必ず、変更を表示するためにデータ・コントロールを手動でリフレッシュする必要があります。アプリケーション・モジュール・データ・コントロールをリフレッシュするには、「データ・コントロール」パネルのヘッダーにある「リフレッシュ」アイコンをクリックします(図12-9を参照)。

図12-9 「データ・コントロール」パネル

「リフレッシュ」によるパネルのリフレッシュ

「リフレッシュ」をクリックすると、使用可能なすべてのデータ・コントロールが「データ・コントロール」パネルで検索され、データ・モデルに対して加えられた構造的な変更が反映されます。

12.2.4 別のプロジェクトで使用するデータ・コントロールのパッケージ化

別のプロジェクトで使用できるよう、データ・コントロールをパッケージ化できます。たとえば、ある開発グループがサービスおよびデータ・コントロールを作成している間に、別の開発グループがUIを作成する場合があります。最初のグループはサービスおよびデータ・コントロールを作成し、Oracle ADFライブラリとしてパッケージ化し、2番目のグループへ送信します。2番目のグループは、リソース・パレットを使用してそのデータ・コントロールを自分達のプロジェクトに追加できます。詳細は、第33章「アプリケーション・コンポーネントの再利用」を参照してください。

12.3 「データ・コントロール」パネルの使用

「データ・コントロール」パネルから項目をドラッグし、それを特定のUIコンポーネントとしてページ上にドロップすることで、データバインドされたユーザー・インタフェースを設計できます。データ・コントロールを使用してUIコンポーネントを作成すると、そのコンポーネントを選択したデータ・コントロールにバインドするために必要な、様々なコードおよびオブジェクトがJDeveloperによって自動的に作成されます。

「データ・コントロール」パネルでは、各データ・コントロール・オブジェクトが特定のアイコンで表されます。表12-1は、各アイコンが表すデータ・コントロール・オブジェクト、「データ・コントロール」パネルの階層内で表示される場所、そのアイコンを使用して作成できるコンポーネントを示しています。

表12-1 「データ・コントロール」パネルのアイコンおよびオブジェクト階層

アイコン 名前 説明 作成できるコンポーネント

データ・コントロール・アイコン


データ・コントロール

データ・コントロールを表します。データ・コントロール自体を使用してUIコンポーネントを作成することはできませんが、その下に表示される子オブジェクトは、いずれも使用できます。ビジネス・サービスの定義方法によっては、複数のデータ・コントロールが存在することがあります。

通常、各アプリケーション・モジュールに対するデータ・コントロールは1つです。ただし、他のタイプのビジネス・サービス(Webサービスなど)に対して作成された追加のデータ・コントロールがある場合があります。Webサービスのデータ・コントロールの作成の詳細は、第13章「WebサービスのFusion Webアプリケーションへの統合」を参照してください。

他のオブジェクトのコンテナとして機能し、コンポーネント作成には使用されません。

コレクション・アイコン


コレクション

名前付きデータ・コレクションを表します。データ・コレクションは、データ・モデル内のデータ・オブジェクト・セット(行セットとも呼ばれる)を示します。データ・コレクション内の各オブジェクトは、データ・モデル内の特定の構造化データ項目(とも呼ばれる)を示します。このガイド全体を通して、データ・コレクションおよびコレクションという用語は、区別なく使用されます。

アプリケーション・モジュールにおいて、データ・コレクションは、ビュー・オブジェクト・インスタンスに含まれているデフォルトの行セットです。コレクションの名前は、ビュー・オブジェクト・インスタンス名と一致します。

ビュー・リンクによって、2つのビュー・オブジェクト間にマスター/ディテール関係が作成されます。アプリケーション・モジュール・データ・モデルにディテール・ビュー・オブジェクト(ビュー・リンクからの結果)のインスタンスを明示的に追加する場合、そのディテール・ビュー・オブジェクトに含まれるコレクションは、マスター・ビュー・オブジェクトに含まれるコレクションの子として表示されます。データ・モデルへのディテール・ビュー・オブジェクトの追加の詳細は、5.6.4項「データ・モデルでアクティブなマスター/ディテール調整を有効化する方法」を参照してください。

コレクションの下の子は、コレクションの属性、ビュー・リンクによって関連付けられる他のコレクション、コレクションから値を戻すカスタム・メソッド、またはコレクションに対して実行できる組込み操作などです。

ビュー・リンク・アクセッサの戻り値を表示するようにJDeveloperを構成している場合は、それらも表示されます。

フォーム、表、グラフ、ツリー、レンジ・ナビゲーションの各コンポーネント、およびマスター/ディテール・コンポーネント。

データ・コントロールのコレクションを使用したフォーム作成の詳細は、第22章「データバインドされた基本的なページの作成」を参照してください。

コレクションを使用した表作成の詳細は、第23章「ADFによるデータバインドされた表の作成」を参照してください。

UIコンポーネントを作成するためのマスター/ディテール関係の使用の詳細は、第24章「マスター/ディテール・データの表示」を参照してください。

グラフ、チャートおよびその他の視覚的なUIコンポーネントの作成の詳細は、第26章「データバインドされたADFデータ視覚化コンポーネントの作成」を参照してください。

属性アイコン


属性

オブジェクト内の個別のデータ要素(行の属性など)を表します。属性は、自分の属するコレクションまたはメソッド戻りの下に、子として表示されます。

ビュー・オブジェクトに含まれていた属性のみが、コレクションの下に示されます。ビュー・オブジェクトが1つ以上のエンティティ・オブジェクトを結合する場合、ビュー・オブジェクトのコレクションには、すべての基礎となるエンティティ・オブジェクトから選択された属性が含まれます。

ラベル、テキスト・フィールド、日付、値リスト、および選択リストの各コンポーネント。

属性を使用したページのフィールド作成の詳細は、22.2項「属性を使用したテキスト・フィールドの作成方法」を参照してください。

リスト作成の詳細は、第25章「データバインドされた選択リストおよびシャトルの作成」を参照してください。

属性アイコン


構造化された属性

Javaプリミティブ・タイプ(属性として示される)または任意のタイプのコレクションのいずれでもない、戻りオブジェクトを示します。構造化属性の例としてドメインがあります。これはアプリケーションのメンテナンスを簡素化するために開発者によって作成されたデータ型です。

ドメインの詳細は、38.1項「ドメインを使用したカスタム検証済データ型の作成」を参照してください。

ラベル、テキスト・フィールド、日付、値リスト、および選択リストの各コンポーネント。

メソッド・アイコン


メソッド

データ・コントロールの操作またはその公開された構造のいずれかを表し、パラメータの受入れや、ビジネス・ロジックの実行を行ったり、オプションで単一の値、構造、またはコレクションを戻すことができます。

アプリケーション・モジュール・データ・コントロールでは、カスタム・メソッドがアプリケーション・モジュール自体の中で定義され、通常は、何も戻さないか、単一のスカラー値を戻します。カスタム・メソッド作成の詳細は、第9章「アプリケーション・モジュールによるビジネス・サービスの実装」を参照してください。

コマンド・コンポーネント。

パラメータを受け入れるメソッドの場合: コマンド・コンポーネントおよびパラメータ付きフォーム。

パラメータを受け入れるメソッドの使用方法の詳細は、28.2.2.2項「メソッドでのパラメータの使用方法」を参照してください。

メソッド戻りアイコン


メソッド戻り値

カスタム・メソッドによって戻されたオブジェクトを表します。戻されたオブジェクトは、単一の値またはコレクションです。

アプリケーション・モジュールで定義されたカスタム・メソッドから戻されるのは通常、単一のスカラー値です。データへの最新の変更の表示がデータ・モデルのビュー・オブジェクトによって処理されるため、アプリケーション・モジュール・メソッドではビュー・レイヤーにデータのセットを戻す必要はありません(詳細は、3.4項「UI対応データ・モデルの概要」を参照)。ただし、非アプリケーション・モジュール・データ・コントロールのカスタム・メソッド(CSVファイルのデータ・コントロールなど)は、ビュー・レイヤーにコレクションを戻すことができます。

メソッド戻りは、これを戻すメソッドの下に、子として表示されます。メソッド戻りの下に子として表示されるオブジェクトは、コレクションの属性、親コレクションに関連するアクションを実行する他のメソッド、または親コレクションで実行できる操作などです。

コレクションおよび属性と同じコンポーネント。

名前付き基準については、問合せフォームまたはクイック問合せフォーム。詳細は、第27章「ADFでデータバインドされた検索フォームの作成」を参照してください。

単一値のメソッド戻り値がドロップされると、メソッドはフレームワークにより自動的に起動されなくなります。メソッドを起動するために、実行可能ファイルとして起動アクションを作成するか、対応するメソッドをボタンとしてドロップする必要があります。実行可能ファイルの詳細は、12.6.2.2項「Executablesバインディング・オブジェクト」を参照してください。

データ・コントロール操作アイコン


操作

親オブジェクトに対してアクションを実行する、組込みデータ・コントロール操作を表します。データ・コントロール操作は、コレクションまたはメソッド戻り値の下の「操作」ノードと、ルート・データ・コントロール・ノードの下にもあります。特定のコレクションまたはメソッド戻りの子である操作は、それらのオブジェクトにのみ作用し、データ・コントロール・ノードの下の操作は、そのデータ・コントロール内のすべてのオブジェクトに作用します。

1つ以上のパラメータが操作に必要な場合、それらのパラメータは操作の下の「パラメータ」ノードにリストされます。

ボタン、リンクおよびメニューなどのUIコマンド・コンポーネント。

詳細は、22.4項「レンジ・ナビゲーションのフォームへの組入れ」および22.5項「既存レコードを編集するフォームの作成」を参照してください。

パラメータ・アイコン


パラメータ

メソッドまたはその下に表示される操作によって宣言されたパラメータ値を表します。パラメータは、メソッドまたは操作の下の「パラメータ」ノード内に表示されます。

ラベル、テキストおよび選択リストの各コンポーネント。


12.3.1 「データ・コントロール」パネルの使用方法

JDeveloperは、ドロップするデータ・コントロール項目に対してそれぞれ選択できるUIコンポーネントの事前定義済セットを備えています。

「データ・コントロール」パネルを使用してUIコンポーネントを作成する手順:

  1. 「データ・コントロール」パネルで項目を選択し、ページのビジュアル・エディタにその項目をドラッグします。パネルの各項目の定義は、表12-1を参照してください。


    ヒント:

    操作またはメソッドをタスク・フローのメソッド・アクティビティにドロップする必要がある場合は、ダイアグラム内のアクティビティにドラッグ・アンド・ドロップするだけです。


    ヒント:

    図12-10に示すように、「データ・コントロール」ヘッダー内の「フィルタ」アイコンを使用して、特定の項目を検索できます。

    図12-10 「データ・コントロール」パネルでのフィルタ処理

    フィルタ文字列を入力して特定のオブジェクトだけを表示
  2. ポップアップ・メニューから、UIコンポーネントを選択します。

    「データ・コントロール」パネルから項目をドラッグしてページにドロップすると、ドロップした項目に使用できるすべてのデフォルトUIコンポーネントのポップアップ・メニューが表示されます。表示されるコンポーネントは、プロジェクト内のライブラリに基づきます。

    図12-11は、「データ・コントロール」パネルからのデータ・コレクションがページにドロップされる際に表示されるポップアップ・メニューを示しています。

    図12-11 「データ・コントロール」パネルのポップアップ・メニュー

    データ・コントロール・パレットのポップアップ・メニュー

    ポップアップ・メニューから選択したコンポーネントに応じて、そのコンポーネントの外観を定義するためのダイアログが自動的に表示されます。たとえば、ポップアップ・メニューから「ADF読取り専用表」を選択すると、「表の列の編集」ダイアログが表示されます。このダイアログを使用して、表の列に表示する属性、列ラベル、各列に使用するテキスト・フィールドのタイプ、および組み込む機能(行選択や列のソートなど)を定義できます。表の作成の詳細は、第23章「ADFによるデータバインドされた表の作成」を参照してください。

    デフォルトで選択されたUIコンポーネントはまず、対応するビジネス・オブジェクト上で設定されているUIコントロール・ヒントで決定されます。コントロール・ヒントが設定されていない場合、JDeveloperでは標準のフォームおよび表の入力コンポーネントと読取り専用のフォームおよび表の出力コンポーネントが使用されます。リストのコンポーネントは、データ・コントロール・オブジェクトをドロップするときに選択するリストの型に基づいて決定されます。

    コンポーネントを選択すると、JDeveloperではビジュアル・エディタのページにそのUIコンポーネントが挿入されます。たとえば、「データ・コントロール」パネルからコレクションをドラッグして、ポップアップ・メニューから「ADF読取り専用表」を選択した場合は、図12-12のように、ビジュアル・エディタに読取り専用の表が表示されます。

    図12-12 データバインドUIコンポーネント: ADF読取り専用表

    データバインドUIコンポーネントの例

    デフォルトでは、「データ・コントロール」パネルでADF Facesコンポーネントを使用したときに作成されるUIコンポーネントは、ADFデータ・コントロール内の属性にバインドされ、1つ以上の組込み機能が装備されます。これらの機能は次のとおりです。

    デフォルトのコンポーネントは、そのまま使用しても十分機能します。ただし、特定のニーズに合せて変更することができます。コンポーネントおよびその多様な機能の詳細は、19.3.8項「データバインドされたWebユーザー・インタフェースの作成」で説明します。


    ヒント:

    ページで使用するADFデータバインド・コンポーネントのタイプを変更する場合は、そのコンポーネントを削除して、「データ・コントロール」パネルから新しいコンポーネントをドラッグ・アンド・ドロップする方法が最も簡単です。データバインドされたコンポーネントをページから削除する際に、ページ定義ファイルの関連するバインディング・オブジェクトがなんらかの他のコンポーネントによって参照される場合、JDeveloperでは自動的にこれらのバインディング・オブジェクトを削除します。

12.3.2 「データ・コントロール」パネルの使用時の処理

Oracle ADF WebアプリケーションはJSFフレームワークを使用して作成されますが、ADFデータバインドUIコンポーネントを含むページのレンダリングおよび処理を行うために、いくつかの追加アプリケーション・オブジェクト定義が必要になります。「データ・コントロール」パネルを使用しない場合、これらの様々なファイルを手動で構成する必要があります。一方、「データ・コントロール」パネルを使用した場合は、必要なすべての手順がJDeveloperによって行われます。

  • DataBindings.cpxファイルがプロジェクトのデフォルト・パッケージに作成されます(このファイルが存在しない場合のみ)。また、そのページ用にエントリが追加されます。

    DataBindings.cpxファイルは、アプリケーションのバインディング・コンテキストを定義します。バインディング・コンテキストはコンテナ・オブジェクトの1つで、使用可能なデータ・コントロールおよびデータ・バインディング・オブジェクトのリストを含みます。詳細は、12.3.3項「実行時に行われる処理: バインディング・コンテキストの動作方法」を参照してください。DataBindings.cpxファイルによって、個々のページがページ定義ファイルに含まれるバインディング定義にマップされ、これらのページが使用するデータ・コントロールが登録されます。詳細は、12.4項「DataBindings.cpxファイルでの作業」を参照してください。

  • META-INFディレクトリにadfm.xmlファイルが作成されます。このファイルにより、DataBindings.cpxファイルのレジストリが作成され、バインディング・コンテキストを作成できるように、実行時にアプリケーションで特定できます。

  • web.xmlファイルにADFバインディング・フィルタが登録されます。

    このADFバインディング・フィルタによって、バインディング・コンテキストへのアクセスに必要なHTTPリクエストが事前処理されます。バインディング・フィルタの構成の詳細は、12.5項「ADFバインディング・フィルタの構成」を参照してください。

  • orion-application.xmlファイルが作成され、アプリケーションで必要なOracle ADF共有ライブラリへの参照が追加されます。

  • ビュー・オブジェクトに次のライブラリが追加されます。

    • ADF Facesデータバインディング・ランタイム

    • Oracle XML Parserバージョン2

    • JDeveloperランタイム

    • SQLJランタイム

    • ADF Modelランタイム

    • BC4Jランタイム

    • Oracle JDBC

    • Connection Manager

    • BC4J Oracleドメイン

  • ページ定義ファイル(ページに対して存在しない場合)がページ定義サブパッケージに追加され、その名前がプロジェクト・プロパティのADF Model設定に定義されます。デフォルトのサブパッケージは、adfmsrcディレクトリにあるview.pageDefsです。

    ページ定義ファイル(pageNamePageDef.xml)は、アプリケーションのビュー・レイヤーにある各ページのADFバインディング・コンテナを定義します。バインディング・コンテナでは、ページのすべてのADFバインディング・オブジェクトへのランタイム・アクセスが行われます。ページ定義ファイルを使用して、特定のUIコンポーネントに対するバインディング・オブジェクト定義を定義および編集する方法は、後の章で説明します。ページ定義ファイルの詳細は、12.6項「ページ定義ファイルでの作業」を参照してください。

  • ページ定義ファイルが構成されます。この処理では、ページによって参照されるバインディング・オブジェクトの定義も追加されます。

  • ADF FacesコンポーネントがJSFページに追加されます。

    これらの事前作成済のコンポーネントには、ページ定義ファイルのバインディング・オブジェクトを参照するADFデータ・バインディング式言語(EL)式が含まれます。詳細は、12.7項「ADFデータバインディングEL式の作成」を参照してください。

  • すべてのライブラリ、ファイル、およびADF Facesコンポーネントが必要とする構成要素が追加されます。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』の付録「ADF Facesの構成」を参照してください。

12.3.3 実行時に行われる処理: バインディング・コンテキストの動作方法

ページにADFバインディングが含まれている場合、実行時には、クライアントまたはコントローラから起動されたビジネス・サービスとのやり取りが、バインディング・コンテキストと呼ばれるシングル・オブジェクトを介して、アプリケーションによって管理されます。バインディング・コンテキストは、アプリケーション内のすべてのデータ・コントロールおよびページ定義のランタイム・マップ(名前付きデータでEL式#{data}を使用してアクセス可能)です。

ADFライフサイクルで、図12-13に示すように、アプリケーション・モジュール、DataBindings.cpxおよびページ定義ファイルからOracle ADFバインディング・コンテキストが作成されます。すべてのDataControls.dcxファイルと、ワークスペース内のアプリケーション・モジュールを統合したものが、設計時に使用可能なデータ・コントロールを定義しますが、DataBindings.cpxファイルは、実行時にアプリケーションで使用可能なデータ・コントロールを定義します。DataBindings.cpxファイルは、アプリケーションのページで使用されているデータ・コントロールをリストに表示し、ページ定義ファイルに定義したバインディング・オブジェクトが格納されているバインディング・コンテナをWebページのURLにマップします。ページ定義ファイルは、アプリケーション・ページで使用するバインディング・オブジェクトを定義します。各ページにページ定義ファイルが1つあります。

バインディング・コンテキストには、これらのオブジェクトの現在の実際のインスタンスは含まれていません。ライブ・インスタンスではなく、マップには必要に応じてデータ・コントロールまたはバインディング・コンテナ・オブジェクトになる参照が含まれています。たとえば、オブジェクト(ページ定義など)がアプリケーションから解放されるか、タスク・フローが終了するか、リクエストの終了時にバンディング・コンテナまたはデータ・コントロールが解放されると、データ・コントロールおよびバンディング・コンテナは参照オブジェクトに戻ります。ADFライフサイクルの詳細は、第21章「Fusionページ・ライフサイクル」を参照してください。

図12-13 実行時のADFファイル・バインディングの使用状況

ADFバインディング・ファイルにより実行時にバインディング・コンテキストが作成されます

12.4 DataBindings.cpxファイルでの作業

DataBindings.cpxファイルでは、アプリケーション全体のバインディング・コンテキストが定義されます。実行時にはこのメタデータから、Oracle ADFバインディング・オブジェクトが作成されます。たとえばリージョンなどのコンポーネントがプロジェクトの外で作成され、インポートされた場合は、アプリケーションに複数のDataBindings.cpxファイルが存在することがあります。これらのファイルは個々のページをページ定義ファイルにマップし、どのデータ・コントロールをアプリケーションで使用するかを宣言します。実行時には、DataBindings.cpxファイルにリストされたデータ・コントロールのみが、現在のアプリケーションで使用可能になります。

12.4.1 JDeveloperによるDataBindings.cpxファイルの作成方法

初めて「データ・コントロール」パネルを使用して、ページにコンポーネントを追加したり、アクティビティに操作を追加する際には、JDeveloperによって、ビュー・プロジェクトのデフォルト・パッケージ内に、DataBindings.cpxファイルが自動的に作成されます。このファイルは、プロジェクトのadfmsrcディレクトリにあります。DataBindings.cpxファイルが作成されると、最初のページまたはタスク・フロー・アクティビティ用のエントリが自動的に追加されます。その後、「データ・コントロール」パネルを使用するたびに、そのページまたはアクティビティ用のエントリがまだない場合は、エントリがDataBindings.cpxに追加されます。


ヒント:

JDeveloperではリファクタをサポートしています。つまり、DataBindings.cpxファイルで参照されている多くのオブジェクトを安全に移動したり名前を変更することが可能になり、参照が更新されます。詳細は、第32章「Fusion Webアプリケーションのリファクタ」を参照してください。

12.4.2 DataBindings.cpxファイルの作成時の処理

JDeveloperによりDataBindings.cpxファイルが作成されると、そのファイルを概要エディタで開くことができます。図12-14は、概要エディタで表示される、StoreFrontモジュール・アプリケーションからのDataBindings.cpxファイルを示しています(切り捨てられていることに注意)。

図12-14 概要エディタでのDataBindings.cpxファイル

JDeveloperの概要エディタ

例12-1は、StoreFrontモジュール・アプリケーションの.cpxファイルの抜粋を示しています。

例12-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」を参照してください。

12.5 ADFバインディング・フィルタの構成

ADFバインディング・フィルタはサーブレット・フィルタの1つで、oracle.adf.model.servlet.ADFBindingFilterクラスのインスタンスです。ADF Webアプリケーションは、ADFバインディング・フィルタを使用して、バインディング・コンテキストへのアクセスが必要なすべてのHTTPリクエストを前処理します。これを行うには、ADFバインディング・フィルタがアプリケーションに存在するすべてのDataBindings.cpxファイルを認識している必要があります。

12.5.1 ADFバインディング・フィルタの構成方法

「データ・コントロール」パネルを使用して、初めてデータバインド・コンポーネントをページに追加する際には、JDeveloperによって、アプリケーションのweb.xmlファイル内にフィルタが自動的に構成されます。

12.5.2 ADFバインディング・フィルタを構成した場合の処理

バインディング・フィルタを構成するために、JDeveloperによって、次の要素がweb.xmlファイルに追加されます。

  • ADFバインディング・フィルタ・クラス: javax.servlet.Filterインタフェースを実装するバインディング・フィルタ・オブジェクトの名前を指定します。

    例12-2に示すように、ADFバインディング・フィルタはweb.xmlファイルで定義されます。filter-name要素には値adfBindingsfilter-class要素には、バインディング・フィルタ・クラスの完全修飾名oracle.adf.model.servlet.ADFBindingFilterがそれぞれ含まれている必要があります。

    例12-2 web.xmlファイルで定義されたバインディング・フィルタ・クラス

    <filter>
       <filter-name>adfBindings</filter-name>
       <filter-class>oracle.adf.model.servlet.ADFBindingFilter</filter-class>
    </filter>
    
  • フィルタ・マッピング: フィルタをWebアプリケーション内の静的リソースまたはサーブレットにリンクします。

    実行時にマップ済リソースが要求されると、フィルタが起動します。フィルタ・マッピングは、web.xmlファイルで例12-3のように定義されます。filter-name要素は、値adfBindingsを含む必要があります。

    例12-3 web.xmlファイルで定義されたフィルタ・マッピング

    <filter-mapping>
      <filter-name>adfBindings</filter-name>
      <servlet-name>Faces Servlet</servlet-name>
      <dispatcher>FORWARD</dispatcher>
      <dispatcher>REQUEST</dispatcher>
    </filter-mapping>
    

    ヒント:

    web.xmlファイルで複数のフィルタが定義されている場合は、それらのフィルタを必ず実行順に記載してください。実行時には、web.xmlファイルでの表示順にフィルタが実行されます。adfBindingsフィルタは、初期化するADFコンテキストに依存するフィルタの前に表示されます。

12.5.3 実行時に行われる処理: ADFバインディング・フィルタの動作方法

ADFバインディング・フィルタは、実行時に次の機能を実行します。

  • フィルタを初期化する際に、web.xmlファイルでフィルタ・パラメータとして指定されている名前で、文字コードをオーバーライドします。フィルタinit-param要素のパラメータ名は、encodingです。

  • ADFContextオブジェクトをインスタンス化します。このオブジェクトは、Fusion Webアプリケーションの実行コンテキストであり、ADFのコンテキスト情報が含まれます。これらの情報には、セキュリティ・コンテキスト、およびリクエストとレスポンスのオブジェクトを含む環境クラスが含まれます。

  • ユーザーのHTTPセッションのバインディング・コンテキストを初期化します。バインディング・コンテキストを初期化するには、まず現在のプロジェクトのadfmsrcディレクトリにあるDataBindings.cpxファイルの定義に従ってバインディングをロードします。アプリケーションに別のプロジェクトからインポートされたDataBindings.cpxファイルが含まれている場合、これらのファイルはアプリケーションのクラス・パスにあります。さらにフィルタにより、アプリケーションのクラス・パスで見つかった補助.cpxファイルがロードされます。

  • 同じブラウザ(フレームセットなど)から送信されるHTTPリクエストをシリアライズし、マルチスレッドの問題を回避します。

  • リクエストが送信されることをデータ・コントロール・インスタンスに通知し、リクエストごとに必要な設定が行われるようにします。

  • レスポンスがクライアントに送信された後でデータ・コントロール・インスタンスに通知し、リクエストごとに必要なクリーンアップが行われるようにします。

12.6 ページ定義ファイルでの作業

ページ定義ファイルは、実行時にUIコンポーネントにデータを移入するバインディング・オブジェクトを定義します。ADFバインディングを持つすべてのページには、対応するページ定義ファイルが必要です。このファイルには、そのページで使用するバインディング・オブジェクトの定義が含まれています。ページ定義ファイルによって、すべてのADFバインディングに設計時アクセスが提供されます。実行時には、ページ定義ファイルによって定義されたバインディング・オブジェクトが、ページ定義ファイルの実行時インスタンスであるバインディング・コンテナ内でインスタンス化されます。


注意:

同じページに複数のウィンドウが開いていると、ADFコントローラによって各ウィンドウに独自のDataControlFrameが割り当てられます。これにより、各ウィンドウが独自のバインディング・コンテナを持つようになります。

12.6.1 ページ定義ファイルの作成方法

「データ・コントロール」パネルを初めて使用する際には、JDeveloperによって、そのページのページ定義ファイルが自動的に作成され、コンポーネントが参照する各バインディング・オブジェクトの定義が自動的に追加されます。それ以降、ページにデータバインド・コンポーネントを追加するたびに、JDeveloperによって、必要なバインディング・オブジェクト定義がページ定義ファイルに自動的に追加されます。

デフォルトでは、ページ定義ファイルは、ビュー・プロジェクトのApplication Sourcesディレクトリにあるview.PageDefsパッケージに含まれています。対応するJSFページがデフォルト(public_html)以外のディレクトリ、またはデフォルトのサブディレクトリに保存されると、ページ定義も同じ名前のペッケージに保存されます。たとえば、JSFファイルをpublic_html\myDirectoryディレクトリ日本すると、ページ定義がmyDirectoryパッケージに保存されます。ページ定義ファイルの場所は、「プロジェクト・プロパティ」ダイアログのADF Model設定ページを使用して変更できます。

JDeveloperによるページ定義ファイルの命名には、次の規則が使用されます。

pageNamePageDef.xml

上のpageNameは、JSFページの名前を表します。つまり、JSFページの名前がhome.jspの場合は、デフォルトのページ定義ファイル名はhomePageDef.xmlになります。ページをサブディレクトリに組み入れる場合、Jdeveloperでは、次の規則を使用してディレクトリ名をページ定義ファイル名の接頭辞にします。

directoryName_pageNamePageDef.xml

たとえば、StoreFrontモジュールでは、updateUserInfoページのページ定義ファイルの名前(「Webコンテンツ」ノードのaccountサブディレクトリ内に存在)は、account_updateUserInfoPageDef.xmlです。


ヒント:

タスク・フローのページ定義は、同じネーミング規則に従います。

ページ定義ファイルを開くには、ビジュアル・エディタでページまたはアクティビティを右クリックし、「ページ定義に移動」を選択します。JSFページ場合は、エディタの「バインディング」タブをクリックして、「ページ定義ファイル」リンクをクリックします。


ヒント:

JDeveloperでは、「データ・コントロール」パネルを使用してコンポーネントを作成する場合にはJSFページのページ定義、項目をアクティビティにドロップする場合にはタスク・フローのページ定義が自動的に作成されますが、関連付けられたJSFページやタスク・フロー・アクティビティを削除してもページ定義は削除されません(たとえばデスクトップ統合の使用時など、バインディングが必要になる場合でもJSFページを使用せずに残すことができます)。ページ定義が不要になった場合、ページ定義とそのページ定義への参照はすべて手動で削除する必要があります。ただし、対応するページまたはアクティビティがコールされないかぎり、ページ定義を使用してバインディング・コンテキストが作成されることはありません。したがって、必ずしもアプリケーションから未使用のページ定義ファイルを削除する必要があるわけではありません。

12.6.2 ページ定義ファイルの作成時の処理

JDeveloperでページ定義ファイルが作成されると、概要エディタに表示されます。図12-15は、StoreFrontモジュール・アプリケーションのmyOrders.jspxページに対して作成された概要エディタのページ定義ファイルを示しています。

図12-15 概要エディタでのページ定義ファイル

バインディング、実行可能ファイルおよびデータ・コントロール間の関係

概要エディタには次のタブが含まれており、これらを使用してバインディング、コンテキスト・イベント、ページのパラメータを表示および構成できます。

  • バインディングと実行可能ファイル: 概要エディタのページ定義の「バインディングと実行可能ファイル」タブでは、Bindings、Executablesおよび関連付けられたData Controlsの3つの異なるタイプのオブジェクトが表示されます(BindingsとExecutablesは、選択しないかぎりデータ・コントロールには表示されません)。たとえば、図12-15では、OrderDate1属性のバインディングはMyOrdersIteratorイテレータを使用して値を取得していることがわかります。イテレータは、StoreServiceAMDataControlデータ・コントロールのMyOrdersコレクションにアクセスしています。詳細は、12.6.2.2項「Executablesバインディング・オブジェクト」を参照してください。

    デフォルトでは、モデル・バインディング・オブジェクトは、そのオブジェクトを作成するために使用されたデータ・コントロール・オブジェクトの名前が付けられます。データ・コントロール・オブジェクトが1ページ内で何度も使用される場合、Jdeveloperではデフォルトのバインディング・オブジェクト名に数字を追加して、それぞれが一意になるようにします。12.7項「ADFデータバインディングEL式の作成」は、ADFデータバインディングEL式によるバインディング・オブジェクト名の参照方法について説明しています。

    表12-2は、概要エディタで表示される各バインディング・オブジェクトのアイコンを示しています(エディタの「パラメータ」 セクションでパラメータ・オブジェクトが表示されますが、これらもバインディング・オブジェクトとみなされます)。

    表12-2バインディング・オブジェクト・アイコン

    バインディング・オブジェクト型 アイコン 説明

    パラメータ

    パラメータ・バインディング・オブジェクト・アイコン


    パラメータ・バインディング・オブジェクトを表します。

    バインド

    属性バインディング・オブジェクト


    属性値のバインディング・オブジェクトを表します。


    リスト・バインディング・オブジェクト・アイコン


    リスト値のバインディング・オブジェクトを表します。


    ツリー・バインディング・オブジェクト・アイコン


    ツリー値のバインディング・オブジェクトを表します。


    ツリー・バインディング・オブジェクト・アイコン


    メソッドのアクション・バインディング・オブジェクトを表します。

    Bindings/
    Executables

    アクション・バインディング・オブジェクト・アイコン


    アクション・バインディング・オブジェクトを表します。また、起動アクションのExecutablesバインディング・オブジェクトとイベントを表します。

    実行可能ファイル

    イテレータ・バインディング・オブジェクト・アイコン


    イテレータ・バインディング・オブジェクトを表します。


    タスク・フロー・オブジェクト・アイコン


    タスク・フローのExecutablesバインディング・オブジェクトを表します。


  • コンテキスト・イベント: アプリケーション内のアーティファクトが登録可能なコンテキスト・イベントを作成できます。たとえばStoreFrontモジュール内で、コンテキスト・イベントを顧客登録ページに使用して、適切な情報トピックを表示できます。register.jspxページには2つのリージョンが含まれています。一方のリージョンには顧客登録タスク・フローが含まれ、他方には情報トピックのタスク・フローが含まれています。コンテキスト・イベントが顧客登録リージョンから情報トピック・リージョンに渡され、情報トピック・タスク・フローに正しい情報トピックを表示します。設計時はイベント名、プロシージャ・リージョン、消費者ハンドラー、その他の情報が、ページ定義ファイルのイベント・マップ・セクションに保存されます。コンテキスト・イベントの詳細は、28.7項「コンテキスト・イベントの作成」を参照してください。

  • パラメータ: パラメータ・バインディング・オブジェクトは、リクエストの開始時にページが評価するパラメータを宣言します。ADFライフサイクルの詳細は、第21章「Fusionページ・ライフサイクル」を参照してください。静的値、または静的値を割り当てるEL式を使用して、ページ定義ファイル内のパラメータ値を定義できます。

    例12-4は、ページ定義ファイルでのパラメータ・バインディング・オブジェクトの定義方法を示しています。

    例12-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式によって定義されます。


    ヒント:

    デフォルトでは、JDeveloperはJSP EL構文標準であるドル記号($)を、ページ定義ファイル内のEL式の接頭辞として使用します。ただし、これもJSF EL構文標準であるハッシュ記号(#)を接頭辞として使用することもできます。

    パラメータをメソッドへ渡す方法の詳細は、28.3項「コマンド・コンポーネントを使用したパラメータ値の設定」を参照してください。

概要エディタの項目(または構造ウィンドウの関連付けられたノード)をクリックすると、プロパティ・インスペクタを使用してその項目の属性値を表示および編集したり、「ソース」タブをクリックしてXMLソースを直接編集できます。例12-5は、図12-15に示すページ定義ファイルの省略形のXMLコードを示しています。

例12-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」を参照してください。

12.6.2.1 Bindingsバインディング・オブジェクト

UIコンポーネントをデータ・コントロールのオブジェクトにバインドする場合に使用するBindingsバインディング・オブジェクトは3種類あります。

  • 値: イテレータ・バインディングを参照してUIコンポーネントにデータを表示します。データ・コントロールからデータを表示するページ上の個別UIコンポーネントは、それぞれ値バインディング・オブジェクトにバインドされます。値バインディング・オブジェクトは、次のとおりです。

    • 属性値: テキスト・フィールドをオブジェクト(属性バインディング・オブジェクトとも呼ばれます)内の特定の属性にバインドする

    • リスト: データ・コレクション内でリスト・アイテムを属性のすべての値にバインドします。

    • ツリー: 表全体をデータ・コレクションにバインドし、ツリーのルート・ノードをデータ・コレクションにバインドすることもできます。

    • ボタン(boolean): チェック・ボックスを属性のブール値にバインドします。

    • グラフ: グラフを直接ソース・データにバインドします。

  • メソッド・アクション: ボタンやリンクなどのコマンド・コンポーネントをデータ・コントロール上のカスタム・メソッドにバインドします。メソッド・アクション・バインディング・オブジェクトは、メソッドの起動方法およびメソッドが取得するパラメータ(該当する場合)の詳細をカプセル化します。

  • アクション: ボタンやリンクなどのコマンド・コンポーネントを組込みデータ・コントロール操作(CommitやRollbackなど)または組込みコレクションレベル操作(Create、Delete、Next、またはPreviousなど)にバインドします。

バインディング・オブジェクトは、ページ上のUIコントロールで機能するため、コントロール・バインディング・オブジェクトと総称されます。

例12-6bindings要素の例を示しています。これは、Commitというアクション・バインディングを1つ、PaymentOptionID1というテキスト・フィールドの属性バインディングを1つ、およびPaymentTypeCodeというリスト・バインディングを1つ定義します。

例12-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の値は、操作を実行する前にモデル・レイヤーを更新する必要があることを指定します。

この操作により、コンテキスト・イベントが発生した場合、イベント定義も表示されます。イベントを使用するバインディングがページに含まれている場合、イベント・マッピングも同様に表示されます。詳細は、28.7項「コンテキスト・イベントの作成」を参照してください。

attributeValues要素は、ページ上のテキスト・フィールドに対して値バインディングを定義します。例では、PaymentOptionId1属性バインディングによりPaymentOptionIdの値が表示され、この値がAttrNames要素に定義されます。IterBinding属性は、テキスト・フィールドに表示されるデータを管理するイテレータ・バインディングを参照します(詳細は、12.6.2.2項「Executablesバインディング・オブジェクト」を参照してください)。

PaymentTypeCode要素により、PaymentOptionsビュー・オブジェクト上で作成されたLOVにアクセスして支払いタイプ・コードのリストを表示するために使用される、リスト・バインディングが定義されます。ビュー・オブジェクトのLOVを使用したリスト作成の詳細は、第25章「データバインドされた選択リストおよびシャトルの作成」を参照してください。

12.6.2.2 Executablesバインディング・オブジェクト

Executablesバインディング・オブジェクトは7種類あります。

  • イテレータ: ビュー・オブジェクト・コレクション全体で反復処理するイテレータにバインドします。ページで使用されるコレクションごとに1つのイテレータ・バインディングがあります。ページ上のすべての値バインディングはイテレータ・バインディングを参照して、実行時にデータを伴って移入されたコンポーネント値を含む必要があります。

    コレクションまたはコレクションの属性をページ上にドロップすると、イテレータ・バインディングが自動的に実行可能ファイルとして追加されます。いてれーた・バインディング・オブジェクトは、基礎になっているADFのRowSetIteratorオブジェクトにバインドされます。このオブジェクトは現在のオブジェクトと現在の範囲情報を管理します。イテレータ・バインディングは、そのページで使用されている他のバインディング・オブジェクトに、現在のオブジェクトと範囲状態を公開します。イテレータの範囲は、そのページで表示する現在のオブジェクト・セットを示します。現在の範囲内の最大オブジェクト数は、イテレータのrangeSize属性で定義されています。たとえば、データ・コントロール内のコレクションに製品が含まれており、イテレータ範囲が25の場合は、コレクション内の最初の25の製品がページ上に表示されます。ユーザーがスクロール・ダウンすると、次の25製品が表示されます。ユーザーがスクロール・アップすると、前の25製品が表示されます。ビュー・オブジェクトで範囲ページ移動を使用している場合は、イテレータ・バインディングで範囲セットを一度に戻すように設定できます。詳細は、39.1.5項「範囲ページ移動を使用した大きい結果セットの効率的なスクロール」を参照してください。


    注意:

    ページが2ページあり、それぞれイテレータ・バインディングが同じビュー・オブジェクトのイテレータにバインドされている(たとえば、異なる2ページに同じコレクションをドロップした)場合、両方のページのイテレータ・バインディングでrangeSize属性を同じにする必要があります。この属性が同じでないと、レンジ・サイズが小さい方のページによりイテレータが再実行され、他のページに予期しない結果が生じる可能性があります。

  • メソッド・イテレータ:データ・コントロールでカスタム・メソッドによって戻されるコレクション全体で反復処理するイテレータにバインドします。

    メソッド・イテレータ・バインディングは、常にメソッド・アクション・バインディング・オブジェクトに関連しています。メソッド・アクション・バインディングは、メソッドの起動方法およびメソッドが取得するパラメータ(該当する場合)の詳細をカプセル化します。メソッド・アクション・バインディング自体がメソッド・イテレータにバインドされ、データが提供されます。

    データ・コントロールのカスタム・メソッドから、メソッド戻りコレクションまたはメソッド戻りコレクションの属性をページ上にドロップする場合のみ、メソッド・イテレータのExecutablesバインディング・オブジェクトが表示されます。アプリケーション・モジュール・データ・コントロールのみを使用する場合、イテレータ・バインディング・オブジェクトのみが表示されます。

  • 変数イテレータ: バインディング・コンテナ内のすべての変数を他のバインディングに公開するイテレータにバインドします。コレクションごとにイテレータ・バインディングがありますが、1ページで使用されているすべての変数には、1つの変数イテレータ・バインディングしかありません。(変数イテレータは、バインディング・コンテナ変数を属性として持つ、単一のデータ・オブジェクトだけが含まれたコレクションを指すイテレータのようなものです。)

    ページの変数は、バインディング・コンテナに対してローカルであり、バインディング・コンテナ・オブジェクトが存在する間のみ存在します。ページから収集したパラメータが要求されるデータ・コントロール・メソッドまたはデータ・コントロール操作を使用する際には、JDeveloperによって、ページ定義ファイル内のパラメータの変数が自動的に定義されます。属性バインディングは、ページ変数を参照できます。

    変数イテレータには、variableおよびvariableUsageの2種類の変数のうち1つを含むことができます。variableタイプ変数は単純な値ホルダーですが、variableUsageタイプ変数は、ビュー・オブジェクトの名前付きバインド・パラメータに関連する値ホルダーです。変数をvariableUsageタイプとして定義すると、バインドされるビュー・オブジェクトの名前付きバインド変数からデフォルト値やUIコントロール・ヒントを継承できるようになります。

  • 起動アクション: ページ・ライフサイクルの任意のフェーズ中に、アクション・バインディングまたはメソッド・アクション・バインディングで定義された操作またはメソッドを起動するメソッドにバインドします。


    ヒント:

    ページがレンダリングされる前にメソッドを実行する必要がある場合は、ページ定義ファイルの起動アクションではなく、タスク・フローのメソッド・コール・アクティビティを使用してメソッドを起動する必要があります。メソッド・コール・アクティビティを使用すると、ページ・ロジックの起動が簡単になり、タスク・フローに多くの情報を表示できるため、ダイアグラムの読取りが容易になり、使用しやすくなります。ただし、ページのライフサイクルの複数のフェーズでメソッドを実行する必要がある場合や、ページおよびページ定義ファイルを再利用して、メソッドをページに関連付ける場合、またはアプリケーションでADFを使用しない場合は、起動アクションを使用してメソッドを起動する必要があります。

  • ページ: テンプレートのページ定義ファイルにバインドします(テンプレートを使用している場合)。テンプレートを使用した作業の詳細は、20.2項「ページ・テンプレートの使用」を参照してください。


    注意:

    ページ要素を使用して別のページ定義ファイルにバインドすることもできます。ただし、実行時には、現在の受信ページ(レンダリングされたページが受信ページと異なる場合は、レンダリングされたページ)のバインディング・コンテナのみが、現在のリクエスト中にフレームワークにより自動的に作成されます。したがって、現在のページから別のページのバインド値にアクセスするには、(たとえば、バッキングBeanを使用して)現在のリクエストにそのページのバインディング・コンテナをプログラムで作成する必要があります。作成しない場合、そのページのバインド値は利用できなくなるか、現在のリクエストで有効にできません。

  • 検索するリージョン: 検索が実行できるよう、名前付き基準をイテレータにバインドします。

  • タスク・フロー: リージョンのタスク・フローのバインディング・コンテナをインスタンス化します。

実行時には、ExecutableバインディングはそのRefresh属性の値に基づいてリフレッシュされます。イテレータ・バインディングをリフレッシュすると、そのバインディングの基礎となるRowSetIteratorオブジェクトにバインディングを再接続します。起動アクション・バインディングをリフレッシュすると、アクションが起動されます。バインディングをリフレッシュする前に、ADFランタイムにより実行可能ファイルで指定されたRefresh属性およびRefreshCondition属性が評価されます。Refresh属性は、実行可能ファイルが起動されるADFライフサイクル・フェーズを指定します。RefreshCondition属性は、実行可能ファイルが起動される条件を指定します。ブールEL式を使用して、RefreshCondition値を指定できます。RefreshCondition属性を空白のままにする場合は、trueと評価されます。

デフォルトでは、Refresh値はdeferredに設定されています。これは、バインディングが(たとえば、JSFページのEL式から)アクセスされないかぎり実行されないことを意味します。バインディングがコールされると、バインディングのパラメータ値が変更されるか、バインディング自体が変更されないかぎり再実行されません。

バインディングのリフレッシュ方法と、Refresh属性およびRefreshCondition属性の設定方法の詳細は、21.2項「JSFページ・ライフサイクルとADFページ・ライフサイクル」を参照してください。

例12-7は、Executablesバインディング・オブジェクトの例を示しています。

例12-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コレクションとマスター/ディテールの関係にあります。詳細は、第24章「マスター/ディテール・データの表示」を参照してください。

iterator要素のBinds属性により、イテレータが反復処理するコレクションが定義されます。RangeSize属性は、イテレータが一度にページ上で表示するオブジェクトの数を定義します。RangeSizeの値が-1の場合、イテレータはコレクション内のすべてのオブジェクトを表示します。


ヒント:

通常、イテレータ・バインディングのデフォルト・レンジ・サイズは25です。ただし、イテレータ・バインディングが「リスト・バインディングの編集」ダイアログから作成される場合、そのレンジ・サイズは-1にデフォルト設定されるため、最初の25個のみでなく、すべての選択肢がリストに表示されます。


パフォーマンスに関するヒント:

イテレータがADF Business Componentsレイヤーのビュー・オブジェクトからデータ・オブジェクトをフェッチするために必要なラウンドトリップの回数を減らすには、rangeSize属性を-1に設定します。これにより、ユーザーがオブジェクトを移動するときに、サーバーに対して何度もラウンドトリップすることがなくなり、1回のラウンドトリップでオブジェクトがフェッチされます。

12.7 ADFデータ・バインディングEL式の作成

データ・モデルからのデータを表示するため、WebページのUIコンポーネントは、JSF式言語(EL)式を使用してバインディング・オブジェクトにバインドされます。EL式は、バインディング・コンテナ内の特定のバインディング・オブジェクトを参照します。実行時に、JSFランタイムはEL式を評価し、ページ表示の際にコンポーネントにデータを移入するバインディング・オブジェクトから値を取得します。ユーザーがUIコンポーネントでデータを更新する場合、JSFランタイムは同じEL式に基づいて、対応するバインディング・オブジェクトに値を戻します。


ヒント:

マネージドBean内でEL式を使用する必要が生じる場合があります。マネージドBean内でのEL式の使用の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』の「EL式の作成」の項を参照してください。

12.7.1 ADFデータ・バインディングEL式の作成方法

「データ・コントロール」パネルを使用してコンポーネントを作成すると、ADFデータ・バインディング式が自動的に作成されます。式は、データを表示またはバインディング・オブジェクトのプロパティを参照する、すべてのコンポーネント属性に追加されます。事前作成済のそれぞれの式は、ページ定義ファイルで定義された、適切なバインディング・オブジェクトを参照します。これらのバインディング式は編集可能ですが、ADFバインディング式の基本構文に従っていれば、独自に作成することもできます。ADFデータ・バインディング式は、バインディング・オブジェクトからのデータを移入する任意のコンポーネント属性に追加できます。

JSFページの一般的なADFデータ・バインディングEL式は、次の構文を使用して、バインディング・コンテナ内のタイプの異なるバインディング・オブジェクトを参照します。

#{bindings.BindingObject.propertyName}

説明:

  • bindingsは、式によって参照されているバインディング・オブジェクトが現在のページのバインディング・コンテナにあることを識別する変数です。すべてのADFデータ・バインディングEL式は、bindings変数で始まる必要があります。

  • BindingObjectは、ページ定義ファイルで定義される、バインディング・オブジェクトのID、または属性については名前です。バインディングobjectIDまたは名前は、そのページ定義ファイル内で一意なものです。EL式は、パラメータ・バインディング、実行可能バインディングまたは値バインディングなど、ページ定義ファイル内のどのバインディング・オブジェクトでも参照できます。

  • propertyNameは、各データバインドUIコンポーネントのデフォルトの表示方法を決定し、実行時のバインディング・オブジェクトのプロパティを設定する変数です。各タイプのバインディング・オブジェクトに対して、異なるバインディング・プロパティがあります。バインディング・プロパティの詳細は、12.7.2項「ADFバインディング・プロパティについて」を参照してください。

たとえば、JSFページに表示される次の式を例にしてみます。

#{bindings.ProductName.inputValue}

bindings変数は、現在のページのバインディング・コンテナでバインドされた値を参照します。参照されているバインディング・オブジェクトはProductNameであり、これは属性バインディング・オブジェクトです。バインディング・プロパティはinputValueで、最初のProductName属性の値を戻します。


ヒント:

ページ定義ファイルのバインディング式ではドル記号($)またはハッシュ記号(#)の接頭辞を使用できますが、JSFページのEL式で使用できるのは、ハッシュ記号(#)の接頭辞のみです。

前述のように、「データ・コントロール」パネルを使用してUIコンポーネントを作成する場合、これらの式が組み込まれます。ただし、必要に応じて手動で式を作成することもできます。JDeveloperの式ビルダーは、UIコンポーネントがバインドされるその他の有効なオブジェクトに加え、ページ定義ファイルに定義されたバインディング・オブジェクトのリストを提供することにより、EL式の構築を支援するダイアログです。また、ADFバインディング・オブジェクトの階層リストやADFバインディング・オブジェクトの最も一般的に使用されるプロパティが提供されるため、ADFデータバインド式の作成や編集に特に便利です。バインディング・プロパティの詳細は、12.7.2項「ADFバインディング・プロパティについて」を参照してください。

12.7.1.1 プロパティ・インスペクタから式ビルダーを開く手順

ビジュアル・エディタで項目を選択し、プロパティ・インスペクタを使用して特定の属性についてEL式を作成できます。

プロパティ・インスペクタから式ビルダーを開く手順:

  1. 構造ウィンドウまたはビジュアル・エディタでUIコンポーネントを選択します。

  2. 「プロパティ・インスペクタ」で、フィールドの隣のドロップダウン・リストをクリックし、「式ビルダー」を選択します。

12.7.1.2 式ビルダーの使用

式ビルダーを開いたら、これを使用してEL式を作成できます。

式ビルダーの使用手順:

  1. 「式ビルダー」ダイアログを開きます。

  2. 式ビルダーの次の機能を使用して、ADFバインディング式を編集または作成します。

    • 変数ツリーを使用して、バインディング式に含める項目を選択します。ツリーには、バインディング・オブジェクトの階層表現が含まれます。ツリーの各アイコンは、式で使用できる様々なタイプのバインディング・オブジェクトを表します(各アイコンの説明は、表12-3を参照してください)。

      ツリーを絞り込むには、ドロップダウン・フィルタを使用するか、検索フィールドに検索基準を入力します。ツリー内の項目をダブルクリックし、「式」ボックスに移動します。

    • 演算子ボタンを使用して、論理演算子または数値演算子を式に追加します。


    ヒント:

    また、「式」ボックスに直接式を入力することもできます。

表12-3 「式ビルダー」の「ADFバインディング」ノードの下にあるアイコン

アイコン 説明

bindingsコンテナ変数アイコン


現在のページのバインディング・コンテナを参照する、bindingsコンテナ変数を示します。bindingsノードを開くと、現在のページのすべてのバインディング・オブジェクトが公開されます。

バインディング・コンテナ変数アイコン


バインディング・コンテキスト全体を参照する、dataバインディング変数を示します(アプリケーション内の.cpxファイルから作成)。dataノードを開くと、アプリケーション内のページ定義ファイルが公開されます。

アクション・バインディング・オブジェクト・アイコン


アクション・バインディング・オブジェクトを表します。このアイコンを使用するノードを開くと、有効なアクション・バインディング・プロパティのリストが公開されます。

イテレータ・バインディング・オブジェクト・アイコン


イテレータ・バインディング・オブジェクトを表します。このアイコンを使用するノードを開くと、有効なイテレータ・バインディング・プロパティのリストが公開されます。

属性バインディング・オブジェクト


属性バインディング・オブジェクトを表します。このアイコンを使用するノードを開くと、有効な属性バインディング・プロパティのリストが公開されます。

リスト・バインディング・オブジェクト・アイコン


リスト・バインディング・オブジェクトを表します。このアイコンを使用するノードを開くと、有効なリスト・バインディング・プロパティのリストが公開されます。

ツリー・バインディング・オブジェクト・アイコン


表バインディング・オブジェクトまたはツリー・バインディング・オブジェクトを表します。このアイコンを使用するノードを開くと、有効な表バインディング・プロパティおよびツリー・バインディング・プロパティのリストが公開されます。

バインディング・オブジェクト・プロパティ・アイコン


ADFバインディング・オブジェクト・プロパティを表します。ADFプロパティの詳細は、 12.7.2項「ADFバインディング・プロパティについて」を参照してください。

パラメータ・バインディング・オブジェクト・アイコン


パラメータ・バインディング・オブジェクトを表します。

Java Beanバインディング・オブジェクト・アイコン


JavaBeanを表します。

メソッド・バインディング・オブジェクト・アイコン


メソッドを表します。


12.7.2 ADFバインディング・プロパティについて

式ビルダーを使用してデータバインドされたコンポーネントを作成すると、EL式によって、特定のADFバインディング・プロパティが参照される場合があります。実行時には、これらのバインディング・プロパティによって、データバインドUIコンポーネントのデフォルトの表示方法や、イテレータ・バインディング固有のパラメータなどが定義されます。ADFバインディング・プロパティは、Oracle APIによって定義されます。各バインディング・タイプで使用できるプロパティの完全なリストは、付録B「ADFバインディング・プロパティ」を参照してください。

特定のプロパティに割り当てられる値は、ページ定義ファイルで定義されます。たとえば、イテレータ・バインディングには、イテレータが一度に表示する行数を指定する、RangeSizeというプロパティがあります。例12-8のように、RangeSizeに割り当てられる値は、ページ定義ファイルで指定されます。

例12-8 RangeSizeプロパティを使用したイテレータ・バインディング・オブジェクト

<iterator Binds="ProductsByCategory1" RangeSize="25" 
              DataControl="StoreFrontModuleDataControl" 
              id="Products2Iterator"/>

12.8 最初にシンプルUIを開発する機能の使用

「データ・コントロール」パネルを使用すると、バインドされたコンポーネントを1回のドラッグ・アンド・ドロップ・アクションで設計および作成できますが、基本的なUIコンポーネントを先に作成して後からバインディングを追加した方がよい場合があります。たとえば、ページで宣言的なコンポーネントが使用されている場合、まず宣言的なコンポーネントをドロップしてから正しいADFコントロールにバインドする必要があります。宣言的なコンポーネントは、他のADF Facesコンポーネントで構成された再利用可能な複合UIコンポーネントです。プロジェクトにインポートされた宣言的なコンポーネントは、標準のADF Facesコンポーネントと同様に、コンポーネント・パレットからページにドロップできます。宣言的なコンポーネント全体ではADFデータ・バインディングは使用できませんが、宣言的なコンポーネントが一旦ページにドロップされると、宣言的なコンポーネントを構成する個々のコンポーネントのADFデータ・バインディングを使用できます。宣言的なコンポーネントの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』の「宣言コンポーネントの使用」の項を参照してください。


注意:

最終的にページのUIコンポーネントでADFデータ・バインディングが使用されることがわかっていても、データ・コントロールの準備ができる前にページを開発する必要がある場合、手動でコンポーネントをバインドするのではなく、プレースホルダ・データ・コントロールを使用します。プレースホルダ・データ・コントロールを使用すると、開発済データ・コントロールを使用した場合と同じ宣言的な開発が行われます。詳細は、第29章「プレースホルダ・データ・コントロールによるページの設計」を参照してください。

Webページの設計時に、ADFバインディングは特定のADF Facesタグまたはそれに相当するJSF HTMLタグにしか追加できないことに留意してください。表12-4に、後からADFバインディングを追加できるADF FacesおよびJSFのタグを示します。


ヒント:

JSFの参照実装UIコンポーネント・タグをADFバインディングとともに使用できるようにするには、プロジェクト・プロパティの「ADFビュー設定」「JSFデータ・バインディングにJSF HTMLウィジェットを含む」オプションを選択する必要があります。しかし、ADF Facesタグを特にADFバインディングとともに使用すると、JSFの参照実装タグを使用するときより優れた機能を発揮します。

表12-4 ADFバインディングに使用できるタグ

ADFバインディングで使用されるADF Facesタグ 相当するJSF HTMLタグ

テキスト・フィールド


af:inputText

h:inputText

af:outputText

h:outputText

af:outputLabel

h:outputLabel

af:inputDate

該当なし


af:table

h:dataTable

アクション


af:commandButton

h:commandButton

af:commandLink

h:commandLink

af:commandMenuItem

該当なし

af:commandToolbarButton

該当なし

選択リスト


af:inputListOfValues

該当なし

af:selectOneChoice

h:selectOneMenu

af:selectOneListbox

h:selectOneListbox

af:selecOneRadio

h:selectOneRadio

af:selectBooleanCheckbox

h:selectBooleanCheckbox

問合せ


af:query

該当なし

af:quickQuery

該当なし

ツリー


af:tree

該当なし

af:treeTable

該当なし


バインディングをUIコンポーネントに追加する前に、次のガイドラインを実行します。

12.8.1 ADF Modelデータ・バインディングの既存のUIコンポーネントへの適用方法

構造ウィンドウを使用して、ADF Modelバンディングをコンポーネントに適用します。

ADF Modelデータ・バインディングを適用する手順:

  1. ビジュアル・エディタの「設計」ページで、ADFバインディングを追加するUIコンポーネントを選択します。

    コンポーネントは、表12-4に示すタグのいずれかである必要があります。コンポーネントをビジュアル・エディタで選択すると、図12-16に示すように、構造ウィンドウのそのコンポーネント・タグが同時に選択されます。

    図12-16 JDeveloperの構造ウィンドウ

    JDeveloperワークスペースには構造ウィンドウがあります
  2. 構造ウィンドウで、UIコンポーネントを右クリックし、ポップアップ・メニューで「ADFコントロールにバインド」を選択します。


    注意:

    「ADFコントロールにバインド」メニュー・オプションが表示されるには、プロジェクトにすでにデータ・コントロールが含まれている必要があります。データ・コントロールが含まれていない場合は、第29章「プレースホルダ・データ・コントロールによるページの設計」で説明しているように、プレースホルダ・データ・コントロールを使用する必要があります。

  3. 「ADFコントロールにバインド」ダイアログで、UIコンポーネントをバインドするデータ・コントロールを選択します。選択されたUIコンポーネントと互換性がないコントロールを選択すると、JDeveloperにより通知されます。

12.8.2 ADF Modelデータ・バインディングのUIコンポーネントへの適用時の処理

「データ・コントロール」パネルを使用する場合、12.3.2項「「データ・コントロール」パネルの使用時の処理」で説明しているように、必要なADFオブジェクトはすべて自動的に作成されます。