ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発
12c (12.1.2)
E48099-02
  目次へ移動
目次

前
 
次
 

17 Fusion WebアプリケーションでのADFモデルの使用

この章では、Fusion WebアプリケーションでADFデータ・コントロールを使用して、ADFビジネス・コンポーネントでモデル化されたデータからデータバインドされたページを作成するために使用するJDeveloperツールについて説明します。特に、ADFアプリケーション・モジュールのデータ・モデルとADFビジネス・コンポーネント・クライアント・インタフェース・メソッドが、設計時にドラッグ・アンド・ドロップによるデータ・バインディング用にどのように表示されるかについて説明します。また、実行時にADFデータ・コントロールを使用してADFモデル・データバインディング・レイヤーによりそれらにアクセスする方法についても説明します。

この章には次の項が含まれます:

17.1 Fusion WebアプリケーションでのADFモデルの使用

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

ADFモデルは、アプリケーションのデータ・モデル、ビジュアル・インタフェースおよびアプリケーション・フローがすべて明確に区別される、MVC (Model-View-Controller)デザイン・パターンに基づいて構築されます。図17-1に示すように、ADFモデルは、通常アプリケーションのモデル・レイヤーとして機能するビジネス・サービス上に抽象レイヤーを提供します。MVCアーキテクチャ内でのADFモデルの位置の詳細は、『Oracle Application Development Frameworkの理解』のアプリケーションのモデル・レイヤーの抽象化に関する項を参照してください。

図17-1 ADFアーキテクチャ内のADFモデル

ADFアーキテクチャ内のADFモデル・レイヤーを示すダイアグラム

17.1.1 ADFデータ・コントロールについて

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

ADFビジネス・コンポーネント・アプリケーション・モジュールを作成して、そのアプリケーション・モジュールのデータ・モデルに対してビュー・オブジェクトを追加すると、データ・コントロールが自動的に作成されます。

EJBセッションBean、プレーンJavaオブジェクトおよびWebサービスなど、異なるタイプのビジネス・サービスに基づいてデータ・コントロールを作成することもできます。これらの種類のデータ・コントロールの作業の詳細は、『Oracle ADFデータ・コントロールによるアプリケーションの開発』を参照してください。


注意:

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


17.1.2 JSFデータ・バインディングについて

ADFの宣言的なバインディングは、JSFデータ・バインディングに基づいています。JSFでは、表示または修正(あるいはその両方)する情報にバインディングするために、単純な式言語(EL)を使用します(詳細は、http://www.oracle.com/technetwork/java/unifiedel-139263.htmlを参照してください)。たとえば、特定のユーザー名を参照する#{userInfoBean.principalName}、ユーザー名がSKINGかどうかを評価する#{userInfoBean.principalName eq 'SKING'}などの式があります。汎用の式評価機能により、実行時にそれぞれStringboolean値が戻されるため、コードを必要とせずに、個々のオブジェクトとそのプロパティに自動的にアクセスできます。

特定のJSF UIコンポーネントの値は、実行時にそのvalue属性によって決定されます。コンポーネントにはその値として静的テキストを割り当てることができますが、通常、value属性には、表示データを決定するために実行時インフラストラクチャにより評価されるEL式のバインディングが含まれます。たとえば、現在ログイン中のユーザーの名前を表示するoutputTextコンポーネントには、value属性に#{userInfoBean.principalName}という式を設定できます。EL式を使用してコンポーネントの任意の属性に値を割り当てることができるため、データ駆動型の動的なユーザー・インタフェースを簡単に作成できます。たとえば、UIコンポーネントのrendered属性に#{userInfoBean.prinicpalName !=null}などのブール値の式を使用すると、ユーザーがログインしていないときにコンポーネントを非表示にできます。userInfoBeanの現在のインスタンスにプリンシパル名がない場合、rendered属性はfalseと評価され、コンポーネントはページに表示されなくなります。

17.1.3 ADFデータ・バインディングについて

ADFデータ・バインディングは、ADFデータ・コントロールに宣言的にバインドできるようにすることにより、JSFデータ・バインディングを拡張します。通常のJSFアプリケーションでは、userInfoBeanオブジェクトのようなオブジェクトはマネージドBeanとして作成します。JSFランタイムでは、EL式でBeanを最初に参照した際に、Beanのオンデマンドのインスタンス化が管理されます。ただし、ADFモデルを使用するアプリケーションでは、UIコンポーネントの属性はマネージドBeanのプロパティまたはメソッドにバインディングされるのではなく、汎用データバインディング機能の実行にXML構成ファイルを使用するADFモデルに自動的にバインディングされます。

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

  • 実行可能バインディング: 実行可能バインディングには、イテレータ・バインディングなどが含まれ、データ・コレクションのスクロール処理とページング、および概要情報から詳細情報へのドリルダウンを可能にするユーザー・インタフェースを容易に作成できます。また、実行可能バインディングには、ページ内で一連のページの検索およびネストを可能にするバインディングや、操作を即時実行するためのバインディングも含まれます。

  • 値バインディング: データを表示するUIコンポーネントで使用します。値のバインディングは、単純なテキスト・フィールドで使用する最も基本的なものから、リスト、表、ツリーでのUIコントロールのニーズをサポートするような、より高度なリスト、ツリーのバインディングまで、様々な種類があります。

  • アクション・バインディング: ハイパーリンクやボタンなどのUIコンポーネントで使用され、コードを記述することなく、データ・コレクションやデータ・コントロールの組込み操作またはカスタム操作を実行します。

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


ヒント:

現在のバインディング・コンテナは、プログラム的なアクセス用のAdfContextからも入手できます。


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

17.2 追加機能

ADFモデル・レイヤーを構成または使用する前に、他のOracle ADF機能を理解しておくと役立つ場合があります。また、モデル・レイヤーの構成によって可能になることについても、確認しておくことをお薦めします。次に、関連する他の機能へのリンクを示します。

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

アプリケーション・モジュールを作成すると、アプリケーション・モジュールのデータ・モデルに追加したオブジェクトに対してデータ・コントロールが作成されます。


注意:

その他の種類のビジネス・サービスに対してもデータ・コントロールを作成できます。詳細は、『Oracle ADFデータ・コントロールによるアプリケーションの開発』を参照してください。


ここで重要なことは、データ・コレクション、組込み操作およびサービス・メソッドに対してバインディング・オブジェクトが求めるインタフェースを、アプリケーション・モジュール・コンポーネントが直接実装することです。最適化されたこのような相互作用により、バインディングが次のように直接、データ・モデル内のアプリケーション・モジュール・インスタンスに作用します。

図17-2に、UIコンポーネントをアプリケーション・モジュール・データ・コントロール・オブジェクトと結び付けるイテレータおよびアクション・バインディングの例を示します。

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

バインディングを使用してデータ・コントロールに接続するUI要素

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

「データ・コントロール」パネルで、アイコンをパネルからページのビジュアル・エディタにドラッグ・アンド・ドロップして、データバインドされたUIコンポーネントを作成します。図17-3は、Oracle ADFのSummitサンプル・アプリケーションのデータ・コントロールを表示する「データ・コントロール」パネルを示しています。

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

Summitサンプル・データ・コントロールを表示する「データ・コントロール」パネル

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


注意:

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

  1. JDeveloperのメイン・メニューから、「ファイル」→「プリファレンス」を選択します。

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

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


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


ヒント:

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


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

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

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

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

「データ・コントロール」パネル内の高レベルなコレクション

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

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

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


注意:

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


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

「データ・コントロール」パネルのCommit操作とRollback操作

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

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

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

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

属性、メソッド、操作およびその他の低レベルのノード

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

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

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

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

  • Create with Parameters: パラメータ値を使用して新しい行を作成。渡したパラメータによって、次の作成時の値を指定できます。

    • 多相ビュー・オブジェクトの多相化識別子

    • 多相ビュー・オブジェクトの作成に必要な、構成する側の親の外部キー属性

    • 構成される側の子ビュー・オブジェクト行(親行のコンテキストで作成されない場合)

    多相ビュー・オブジェクトの詳細は、第7項「多相ビュー・オブジェクトの定義」を参照してください。

  • Delete: 現在の行を削除。

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

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

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

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

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

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

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

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

    setCurrentRowWithKeyおよびsetCurrentRowWithKeyValueの使用方法の詳細は、29.2.3項「表での現在行の設定に関する必知事項」を参照してください。

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

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

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


注意:

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


他の全操作:

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

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

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

他のアプリケーション・モジュールのネストされたインスタンスを組み込んで複合アプリケーション・モジュールを作成すると、「データ・コントロール」パネルではこのコンポーネント・アセンブリがツリー階層で表示されます。たとえば、Summit ADFサンプル・アプリケーションにはSummitAppModuleアプリケーション・モジュールが含まれ、これにはBackOfficeAppModuleおよびCustomerSelfServiceAppModuleアプリケーション・モジュールのネストされたインスタンスが含まれます。ネストされたインスタンスはそれぞれ、BackOfficeAMおよびCustomerSelfServiceAMと呼ばれます。図17-7に示すように、3つのアプリケーション・モジュールすべてに対してトップレベルのデータ・コントロールがあり、SummitAppModuleDataControlデータ・コントロールには、BackOfficeAMおよびCustomerSelfServiceAMインスタンス用のサブノードがあります。

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

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

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

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

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

「アプリケーション」ウィンドウと「データ・コントロール」パネルを開くには:

  1. メイン・メニューで、「ウィンドウ」→「アプリケーション」の順に選択します。

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

    図17-8 「アプリケーション」ウィンドウの「データ・コントロール」パネル

    「データ・コントロール」パネルの「展開」アイコンを選択

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

アプリケーション・モジュールまたは基礎となるサービスが変更されたら必ず、変更を表示するためにデータ・コントロールを手動でリフレッシュする必要があります。

「データ・コントロール」パネルをリフレッシュするには:


「データ・コントロール」パネルのヘッダーにある「リフレッシュ」アイコンをクリックします(図17-9を参照)。

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

「データ・コントロール」パネルの「リフレッシュ」アイコンを選択

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

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

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

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

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

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

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

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

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


データ・コントロール

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

通常、各アプリケーション・モジュールに対するデータ・コントロールは1つです。ただし、他のタイプのビジネス・サービス(Webサービスなど)に対して作成された追加のデータ・コントロールがある場合があります。

その他のビジネス・サービスのデータ・コントロールの作成の詳細は、『Oracle ADFデータ・コントロールによるアプリケーションの開発』を参照してください。

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

コレクション・アイコン


コレクション

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

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

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

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

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

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

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

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

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

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

属性アイコン


属性

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

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

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

属性を使用してページ上にフィールドを作成する方法の詳細は、28.2項「データ・コントロール属性を使用したテキスト・フィールドの作成」を参照してください。

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

構造化属性アイコン


構造化された属性

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

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

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

メソッド・アイコン


メソッド

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

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

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

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

メソッド戻りアイコン


メソッド戻り値

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

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

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

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

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

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


操作

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

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

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

詳細は、28.4項「データ・コントロール操作を使用したコマンド・コンポーネントの作成」および28.6項「既存レコードを編集するフォームの作成」を参照してください。

パラメータ・アイコン


パラメータ

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

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

名前付き基準アイコン


名前付き基準

ユーザー検索フォームを作成できる問合せを表します。

「すべての問合せ可能な属性」基準が各アクセッサ・コレクションについて自動的に生成されます。この問合せを使用して、コレクション内の任意の問合せ可能な属性に基づき、ユーザーが問合せを実行できる検索フォームを作成できます。

カスタム・ビュー基準を作成し、「データ・コントロール」パネルに追加できます。5.9項「名前付きビュー基準の処理」を参照してください。

検索フォームの作成の詳細は、第33章「ADFによるデータバインドされた検索フォームの作成」を参照してください。


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

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

始める前に:

「データ・コントロール」パネルの各種オブジェクトに関する知識があると役立つ場合があります。詳細は、17.4項「データ・コントロール・パネルの使用」を参照してください。

次のタスクを完了する必要があります。

  • 13.2項「アプリケーション・モジュールの作成と変更」で説明する手順に従って、データ・モデルに含めたいビュー・オブジェクトのインスタンスを含むアプリケーション・モジュールを作成します。または、別の種類のビジネス・サービスを使用している場合は、『Oracle ADFデータ・コントロールによるアプリケーションの開発』のデータ・コントロールを使用したビジネス・サービスの公開に関する項を参照してください。

  • 26.3項「Webページの作成」の説明に従って、JSFページを作成します。

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

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

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


    ヒント:

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


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

    「フィルタ」アイコンがクリックされた「データ・コントロール」パネル
  2. ポップアップ・メニューから、UIコンポーネントを選択します。

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

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

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

    選択されたADF表を表示するポップアップ・メニュー

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

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

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

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

    ページの設計エディタのADF表コンポーネント

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

    デフォルトのコンポーネントは、そのまま使用しても十分機能します。ただし、特定のニーズに合せて変更することができます。各コンポーネントおよびその各種機能の詳細は、第V部「データバインドされたWebユーザー・インタフェースの作成」を参照してください。


    ヒント:

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


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

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

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

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

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

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

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

  • 必要に応じて、次のようなライブラリをビュー・オブジェクトに追加します。

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

    • Oracle XML Parserバージョン2

    • JDeveloperランタイム

    • ADFモデル・ランタイム

    • BC4Jランタイム

    • Oracle JDBC

    • Connection Manager

    • BC4J Oracleドメイン

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


    ヒント:

    「プロジェクト・プロパティ」ダイアログ(プロジェクト・ノードをダブルクリックするとアクセスできる)のADFモデル設定ページで、パッケージ構成(名前と場所など)を設定できます。


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

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

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

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

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

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

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

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

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

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

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

注意:

アプリケーション・モジュール・データ・コントロールは、アプリケーション・モジュール・プーリングも活用します。アプリケーション・モジュールのデータ・コントロールは、リクエスト開始時に使用可能なアプリケーション・モジュール・インスタンスを自動的に取得するアプリケーション・モジュール・プールのシン・アダプタです。現在のリクエスト中に、アプリケーション・モジュールのデータ・コントロールにより、現在のユーザー・セッションのかわりに、アプリケーション・モジュール・インスタンスへの参照が保持されます。リクエスト終了時に、インスタンスは、データ・コントロールによって解放され、プールに戻されます。詳細は、13.6.2項「実行時に行われる処理: アプリケーションでアプリケーション・モジュール・プーリングと状態管理が使用される場合」を参照してください。


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

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

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

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


ヒント:

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


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

JDeveloperによりDataBindings.cpxファイルが作成されると、そのファイルを概要エディタで開くことができます。図17-14は、概要エディタで表示される、Summit ADFサンプル・アプリケーションからのDataBindings.cpxファイルを示しています。

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

DataBindings.cpxファイルの概要エディタ

例17-1は、Summit ADFサンプル・アプリケーションの.cpxファイルのコンテンツを示しています。

例17-1 DataBindings.cpxファイル

<?xml version="1.0" encoding="UTF-8" ?>
<Application xmlns="http://xmlns.oracle.com/adfm/application"
             version="11.1.1.56.60" id="DataBindings" SeparateXMLFiles="false"
             Package="oracle.summit.view" ClientType="Generic">
  <definitionFactories>
    <factory nameSpace="http://xmlns.oracle.com/adf/controller/binding"
             className="oracle.adf.controller.internal.binding.
                        TaskFlowBindingDefFactoryImpl"/>
    <dtfactory className="oracle.adf.controller.internal.dtrt.binding.
                          BindingDTObjectFactory"/>
    <factory nameSpace="http://xmlns.oracle.com/adfm/dvt"
             className="oracle.adfinternal.view.faces.dvt.model.binding.
                        FacesBindingFactory"/>
  </definitionFactories>
  <pageMap>
    <page path="/index.jsf" usageId="oracle_summit_view_indexPageDef"/>
    <page path="/Customers.jsff" usageId="oracle_summit_view_CustomersPageDef"/>
    <page path="/orders/Orders.jsff"
          usageId="oracle_summit_view_OrdersPageDef"/>
    <page path="/carousel/InventoryControl.jsff" usageId="oracle_summit_view_
                                                    InventoryControlTestPageDef"/>
  </pageMap>
  <pageDefinitionUsages>
    <page id="oracle_summit_view_CustomersPageDef"
          path="oracle.summit.view.pageDefs.CustomersPageDef"/>
    <page id="oracle_summit_view_indexPageDef"
          path="oracle.summit.view.pageDefs.indexPageDef"/>
    <page id="oracle_summit_view_OrdersPageDef"
          path="oracle.summit.view.pageDefs.OrdersPageDef"/>
    <page id="oracle_summit_view_InventoryControlTestPageDef"
          path="oracle.summit.view.pageDefs.InventoryControlPageDef"/>
  </pageDefinitionUsages>
  <dataControlUsages>
    <BC4JDataControl id="BackOfficeAppModuleDataControl"
                     Package="oracle.summit.model.services"
                     FactoryClass="oracle.adf.model.bc4j.DataControlFactoryImpl"
                     SupportsTransactions="true" SupportsFindMode="true"
                     SupportsRangesize="true" SupportsResetState="true"
                     SupportsSortCollection="true"
                     Configuration="BackOfficeAppModuleLocal"
                     syncMode="Immediate"
                     xmlns="http://xmlns.oracle.com/adfm/datacontrol"/>
  </dataControlUsages>
</Application>

エディタの「ページ・マッピング」セクションにより、IDを使用して各JSFページまたはタスク・フロー・アクティビティが対応するページ定義ファイルにマップされます。「ページ定義の使用方法」セクションにより、ページ定義IDはアプリケーション内のページ定義ファイルの絶対パスにマップされます。「データ・コントロールの使用方法」セクションは、ページ定義ファイル内で定義済のバインディング・オブジェクトによって使用されるデータ・コントロールを識別します。これらのマッピングにより、ページの起動時にバインディング・コンテナを初期化できます。

概要エディタで、現在のID名をダブルクリックし、インラインで編集することで、ページ定義ファイルまたはデータ・コントロールのID名を変更できます。ID名を変更すると、アプリケーションのすべての参照が更新されます。ただし、JDeveloperで更新されるのはID名のみであり、ファイル名は更新されません。データ・コントロール名を予約語に変更しないようにしてください。詳細は、13.2.5項「既存のアプリケーション・モジュールの編集方法」を参照してください。

「構造」ウィンドウで要素をクリックし、「プロパティ」ウィンドウを使用してプロパティ値を変更することもできます。DataBindings.cpxファイルの要素および属性の詳細は、A.7項「DataBindings.cpx」を参照してください。

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

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

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

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

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

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

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

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

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

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

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

    例17-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フィルタは、Trinidadフィルタの後、初期化するADFコンテキストに依存するすべてのフィルタの前に表示されます。


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

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

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

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

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

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

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

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

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

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


注意:

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


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

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

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

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

pageNamePageDef.xml

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

directoryName_pageNamePageDef.xml


ヒント:

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


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


ヒント:

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


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

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

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

ページ定義ファイルの概要エディタ

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

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

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

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

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

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

    パラメータ

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


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

    バインド

    属性値バインディング・アイコン


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


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


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


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


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


    メソッド・バインディング・アイコン


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

    Bindings/
    Executables

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


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

    実行可能ファイル

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


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


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


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


    検索リージョン・バインディング・アイコン


    名前付き基準オブジェクトがページに追加される際に使用される、検索リージョン・バインディング・オブジェクトを表します。


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

  • パラメータ: パラメータ・バインディング・オブジェクトは、リクエストの開始時にページが評価するパラメータを宣言します。ADFライフサイクルの詳細は、第27章「Fusionページ・ライフサイクルの理解」を参照してください。そのようなパラメータは、第22章「タスク・フローのパラメータの使用」に説明されているように、タスク・フローから渡すこともできます。

    静的値または静的値を割り当てるEL式を使用して、ページ定義ファイルのパラメータ値を定義できます。例17-4は、EL式を使用して値を割り当てるパラメータ・バインディング・オブジェクトを示しています。

    例17-4 ページ定義ファイルのparameters要素

    <parameters>
    <parameter name="productId" value="${payLoad}"/>
    </parameters>
    

    ヒント:

    パラメータ値のEL式では、ドル記号($)が使用されます。これは、これらの式を積極的に解決し、ページのレンダリング時に結果を即座に戻すようにする必要があるためです。JSFアプリケーションのほとんどのEL式ではハッシュ記号(#)が使用され、モデルの準備ができてから値がアクセスされるように式の評価が遅延されます。


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

例17-5 ページ定義ファイル

<?xml version="1.0" encoding="UTF-8" ?>
<pageDefinition xmlns="http://xmlns.oracle.com/adfm/uimodel"
                version="11.1.1.59.23" id="OrdersPageDef"
                Package="oracle.summit.view.pageDefs">
  <parameters/>
  <executables>
    <variableIterator id="variables"/>
    <iterator Binds="OrdersForCustomer" RangeSize="25"
              DataControl="BackOfficeAppModuleDataControl"
              id="OrdersForCustomerIterator" ChangeEventPolicy="ppr"/>
    <iterator Binds="ItemsForOrder" RangeSize="25"
              DataControl="BackOfficeAppModuleDataControl"
              id="ItemsForOrderIterator" ChangeEventPolicy="ppr"/>
    <iterator Binds="InventoryForOrderItem" RangeSize="-1"
              DataControl="BackOfficeAppModuleDataControl"
              id="InventoryForOrderItemIterator" ChangeEventPolicy="ppr"/>
  </executables>
  <bindings>
    <attributeValues IterBinding="OrdersForCustomerIterator" id="Id">
      <AttrNames>
        <Item Value="Id"/>
      </AttrNames>
    </attributeValues>
.
.
.
    <list IterBinding="OrdersForCustomerIterator" StaticList="false"
          Uses="LOV_OrderFilled" id="OrderFilled" DTSupportsMRU="false"/>
    <attributeValues IterBinding="OrdersForCustomerIterator" id="LastName">
      <AttrNames>
        <Item Value="LastName"/>
      </AttrNames>
    </attributeValues>
    <attributeValues IterBinding="OrdersForCustomerIterator" id="Name">
      <AttrNames>
        <Item Value="Name"/>
      </AttrNames>
    </attributeValues>
    <tree IterBinding="ItemsForOrderIterator" id="ItemsForOrder">
      <nodeDefinition DefName="oracle.summit.model.views.ItemVO"
                      Name="ItemsForOrder0">
        <AttrNames>
          <Item Value="ProductId"/>
          <Item Value="Name"/>
          <Item Value="Price"/>
          <Item Value="Quantity"/>
          <Item Value="ItemTotal"/>
        </AttrNames>
      </nodeDefinition>
    </tree>
.
.
.
  </bindings>
</pageDefinition>

ページ定義ファイルを使用して、特定のUIコンポーネントに対するバインディングを定義および編集する方法は、後の章で説明します。ページ定義ファイルで使用できるすべての要素および属性の説明は、A.8項「pageNamePageDef.xml」を参照してください。

17.7.2.1 ページ定義ファイルで定義されるコントロール・バインディング・オブジェクト

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

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

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

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

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

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

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

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

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

例17-6は、サンプルのbindings要素の抜粋を示しています。特に、要素は表のツリー・バインディング、テキスト・フィールドのいくつかの属性バインディング、CreateInsert組込み操作のアクション・バインディング、およびselectOneChoiceコンポーネントのリスト・バインディングを定義します。

例17-6 ページ定義ファイルのbindings要素

<bindings>
.
.
.
  <tree IterBinding="ItemsForOrderIterator" id="ItemsForOrder">
    <nodeDefinition DefName="oracle.summit.model.views.ItemVO"
                    Name="ItemsForOrder0">
      <AttrNames>
        <Item Value="ProductId"/>
        <Item Value="Name"/>
        <Item Value="Price"/>
        <Item Value="Quantity"/>
        <Item Value="ItemTotal"/>
      </AttrNames>
    </nodeDefinition>
  </tree>
  <attributeValues IterBinding="ItemsForOrderIterator" id="ShortDesc">
    <AttrNames>
      <Item Value="ShortDesc"/>
    </AttrNames>
  </attributeValues>
  <attributeValues IterBinding="ItemsForOrderIterator" id="ImageNameFromDB"
                   ChangeEventPolicy="ppr">
    <AttrNames>
      <Item Value="ImageNameFromDB"/>
    </AttrNames>
  </attributeValues>
.
.
.
  <action IterBinding="ItemsForOrderIterator" id="CreateInsert"
          RequiresUpdateModel="true" Action="createInsertRow"/>
  <list IterBinding="OrdersForCustomerIterator" StaticList="false"
        Uses="LOV_PaymentTypeId" id="PaymentType" DTSupportsMRU="true"/>
</bindings>

例では、tree要素はItemsForOrder表のバインディングを定義します。AttrNames要素は、値が表示される列を定義するために使用されます。IterBinding属性は、表に表示されるデータを管理するイテレータ・バインディングを参照します。詳細は、17.7.2.2項「ページ定義ファイルで定義されるExecutablesバインディング・オブジェクト」および29.2.2.1項「表のイテレータと値バインディング」を参照してください。

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

action要素で定義されたバインディング・オブジェクトは、ItemsForOrderコレクションにある組込みCreateInsert操作を起動するために必要な情報をカプセル化します。RequiresUpdateModel属性のtrueの値は、操作を実行する前にモデル・レイヤーを更新する必要があることを指定します。詳細は、28.4.2項「操作を使用したコマンド・コンポーネント作成時の処理」を参照してください。

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

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

17.7.2.2 ページ定義ファイルで定義されるExecutablesバインディング・オブジェクト

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

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

    コレクションまたはコレクションの属性をページ上にドロップすると、イテレータ・バインディングが自動的に実行可能ファイルとして追加されます。イテレータ・バインディング・オブジェクトは、基礎となるADFのRowSetIteratorオブジェクトにバインドされます。このオブジェクトは現在のオブジェクトと現在の範囲情報を管理します。イテレータ・バインディングは、そのページで使用されている他のバインディング・オブジェクトに、現在のオブジェクトと範囲状態を公開します。

    デフォルトでは、イテレータ・バインディングは、送信されたデータ変更を、そのデータがコミットされてデータソースに戻されるまでキャッシュするように構成されます。データ変更が送信されると、イテレータに関連付けられたバインディングを持つページ上のすべてのコンポーネントがリフレッシュされ、変更されたデータが表示されます。詳細は、27.2.1項「部分ページ・レンダリングおよびイテレータ・バインディングに関する必知事項」を参照してください。

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


    注意:

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


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

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

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

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

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

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

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


    ヒント:

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


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


    注意:

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


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

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

  • 複数タスク・フロー: リージョンのタスク・フローのバインディング・コンテナを、タスク・フローの配列からインスタンス化します。これは、不明な数のリージョンを含むページで役立ちます。たとえば、panelTabbedコンポーネントの各タブがリージョンで、ユーザーが実行時にタブを追加および削除できるような場合です。詳細は、23.11項「複数の不明なリージョンをレンダリングするページの構成」を参照してください。

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

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

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

例17-7は、Summit ADFサンプル・アプリケーションからのExecutablesバインディング・オブジェクトの例を示しています。

例17-7 ページ定義ファイルのExecutablesバインディング・オブジェクト

<executables>
  <variableIterator id="variables"/>
  <iterator Binds="OrdersForCustomer" RangeSize="25"
            DataControl="BackOfficeAppModuleDataControl"
            id="OrdersForCustomerIterator" ChangeEventPolicy="ppr"/>
  <iterator Binds="ItemsForOrder" RangeSize="25"
            DataControl="BackOfficeAppModuleDataControl"
            id="ItemsForOrderIterator" ChangeEventPolicy="ppr"/>
  <iterator Binds="InventoryForOrderItem" RangeSize="-1"
            DataControl="BackOfficeAppModuleDataControl"
            id="InventoryForOrderItemIterator" ChangeEventPolicy="ppr"/>
</executables>

例では、ページ上にOrdersForCustomerコレクションをADF表としてドロップすることにより、OrdersForCustomerIteratorという名前のイテレータ・バインディングが作成されました。ItemsForOrderコレクションを表としてドロップすることにより、ItemsForOrderIteratorという名前のイテレータ・バインディングが作成されました。InventoryForOrderItemコレクションをグラフとしてドロップすることにより、InventoryForOrderItemIteratorという名前のイテレータ・バインディングが作成されました。

OrdersForCustomerコレクションがItemsForOrderコレクションとマスター/ディテール関係にある場合、この2つのイテレータは自動的に同期されます。詳細は、31.3.4項「実行時に行われる処理: マスター/ディテール表およびフォームのADFイテレータ」を参照してください。

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


ヒント:

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



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

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


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

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


ヒント:

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


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

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

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

#{bindings.BindingObject.propertyName}

説明:

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

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

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

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

#{bindings.ProductName.inputValue}

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


ヒント:

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


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

17.8.1.1 「プロパティ」ウィンドウから式ビルダーを開く手順

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

「プロパティ」ウィンドウから式ビルダーを開くには:

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

  2. 図17-16に示すように、「プロパティ」ウィンドウで、プロパティ上にマウス・カーソルを移動し、プロパティの右側に表示されるアイコンをクリックします。

    図17-16 「プロパティ」メニューのアイコン

    「プロパティ」メニューのアイコンの横にマウス・カーソルを移動
  3. ポップアップ・メニューで、図17-17に示すように「式ビルダー」(または「メソッド式ビルダー」)を選択します。

    図17-17 「プロパティ」メニュー

    「メソッド式ビルダー」項目が選択された「プロパティ」メニュー

17.8.1.2 式ビルダーの使用

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

始める前に:

ADFモデル・レイヤーを使用する際に、EL式の作成方法に関する知識があると役立つ場合があります。詳細は、17.8項「ADFデータバインディングEL式の作成」を参照してください。

式ビルダーを使用するには:

  1. 17.8.1.1項「「プロパティ」ウィンドウから式ビルダーを開く手順」で示すように、「式ビルダー」ダイアログを開きます。

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

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

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

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


    ヒント:

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


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

アイコン 説明

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


Beanクラスを表します。

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


メソッドを表します。


17.8.2 ADFバインディング・プロパティに関する必知事項

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

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

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

<iterator Binds="ItemsForOrder" RangeSize="25" 
              DataControl="BackOfficeAppModuleDataControl" 
              id="ItemsForOrderIterator" ChangeEventPolicy="ppr"/>

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

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


注意:

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


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


ヒント:

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


表17-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:button

h:commandButton

af:link

h:commandLink

af:commandMenuItem

該当なし

選択リスト


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コンポーネントに追加する前に、次のガイドラインを実行します。

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

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

始める前に:

UI優先開発に関する知識が役立つ場合があります。詳細は、17.9項「最初にシンプルUIを開発する機能の使用」を参照してください。

次のタスクを完了する必要があります。

  • 13.2項「アプリケーション・モジュールの作成と変更」で説明する手順に従って、データ・モデルに含めたいビュー・オブジェクトのインスタンスを含むアプリケーション・モジュールを作成します。または、別の種類のビジネス・サービスを使用している場合は、『Oracle ADFデータ・コントロールによるアプリケーションの開発』のデータ・コントロールを使用したビジネス・サービスの公開に関する項を参照してください。

  • 26.3項「Webページの作成」の説明に従って、JSFページを作成し、ページに任意のコンポーネントを追加します。

ADFモデル・データ・バインディングを適用するには:

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

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

    図17-18 JDeveloperの構造ウィンドウ

    「構造」ウィンドウと設計エディタで選択されたコンポーネント
  2. 「構造」ウィンドウで、UIコンポーネントを右クリックし、ポップアップ・メニューで「ADFコントロールにバインド」を選択します。


    注意:

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


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

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

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