Oracle® Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発 12c (12.2.1.3.0) E90376-03 |
|
前 |
次 |
この章の内容は次のとおりです。
ADFモデルによって、ユーザー・インタフェース・テクノロジとビジネス・サービス実装の分離を可能にする概念(データ・コントロールと宣言的ADFバインディング)が実装されます。
ADFモデルは、アプリケーションのデータ・モデル、ビジュアル・インタフェースおよびアプリケーション・フローがすべて明確に区別される、MVC (Model-View-Controller)デザイン・パターンに基づいて構築されます。図18-1に示すように、ADFモデルは、通常アプリケーションのモデル・レイヤーとして機能するビジネス・サービス上に抽象レイヤーを提供します。MVCアーキテクチャ内でのADFモデルの位置の詳細は、『Oracle Application Development Frameworkの理解』のアプリケーションのモデル・レイヤーの抽象化に関する項を参照してください。
ADFデータ・コントロールでは、関連するプロパティ、メソッド、タイプの情報を含め、サービスの操作とデータ・コレクションを表す標準のメタデータ・インタフェースを使用してビジネス・サービスの実装技術を抽象化します。ADFビジネス・コンポーネントを使用するアプリケーションでは、アプリケーション・モジュール作成時にデータ・コントロールが自動的に作成され、データ・コントロールにはアプリケーション・モジュールの全機能が含まれます。開発者は、JDeveloperの「データ・コントロール」パネルに表示されたデータ・コントロールの表現を使用して、アプリケーション・モジュールに自動的にバインドされるUIコンポーネントを作成できます。実行時に、ADFモデル・レイヤーによって、適切なXMLファイルからデータ・コントロールおよびバインディングを記述した情報が読み取られ、ユーザー・インタフェースとビジネス・サービスの双方向の結合が実装されます。
ADFビジネス・コンポーネント・アプリケーション・モジュールを作成して、そのアプリケーション・モジュールのデータ・モデルに対してビュー・オブジェクトを追加すると、データ・コントロールが自動的に作成されます。
EJBセッションBean、プレーンJavaオブジェクトおよびWebサービスなど、異なるタイプのビジネス・サービスに基づいてデータ・コントロールを作成することもできます。これらの種類のデータ・コントロールの作業の詳細は、『Oracle ADFデータ・コントロールによるアプリケーションの開発』の「ADFデータ・コントロールの使用」を参照してください。
注意:
ADF Modelレイヤーを使用してビジネス・サービスへのアクセスを実行すると、ビューとビジネス・サービスは同期を維持します。たとえば、データ・コントロール参照をアプリケーション・モジュール・インスタンスにクラス・キャストして、メソッドを直接コールすることにより、アプリケーション・モジュール上でメソッドをコールできますが、モデル・レイヤーがバイパスされ、変更が行われた場合でもモデル・レイヤーでは認識されなくなります。
ADFの宣言的なバインディングは、JSFデータ・バインディングに基づいています。JSFでは、表示または修正(あるいはその両方)する情報にバインディングするために、単純な式言語(EL)を使用します(詳細は、http://www.oracle.com/technetwork/java/unifiedel-139263.html
を参照してください)。たとえば、特定のユーザー名を参照する#{userInfoBean.principalName}
、ユーザー名がSKINGかどうかを評価する#{userInfoBean.principalName eq 'SKING'}
などの式があります。汎用の式評価機能により、実行時にそれぞれString
、boolean
値が戻されるため、コードを必要とせずに、個々のオブジェクトとそのプロパティに自動的にアクセスできます。
特定のJSF UIコンポーネントの値は、実行時にそのvalue
属性によって決定されます。コンポーネントにはその値として静的テキストを割り当てることができますが、通常、value
属性には、表示データを決定するために実行時インフラストラクチャにより評価されるEL式のバインディングが含まれます。たとえば、現在ログイン中のユーザーの名前を表示するoutputText
コンポーネントには、value
属性に#{userInfoBean.principalName}
という式を設定できます。EL式を使用してコンポーネントの任意の属性に値を割り当てることができるため、データ駆動型の動的なユーザー・インタフェースを簡単に作成できます。たとえば、UIコンポーネントのrendered
属性に#{userInfoBean.prinicpalName !=null}
などのブール値の式を使用すると、ユーザーがログインしていないときにコンポーネントを非表示にできます。userInfoBean
の現在のインスタンスにプリンシパル名がない場合、rendered
属性はfalse
と評価され、コンポーネントはページに表示されなくなります。
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によって自動的に作成されます。
ADFモデル・レイヤーを構成または使用する前に、他のOracle ADF機能を理解しておくと役立つ場合があります。また、モデル・レイヤーの構成によって可能になることについても、確認しておくことをお薦めします。次に、関連する他の機能へのリンクを示します。
ADFモデルとデータ・バインディングは、ビジネス・レイヤーに依存します。ほとんどの場合、操作の対象となるのは、ビュー・オブジェクトの表示です。詳細は、「ビュー・オブジェクトを使用したSQL問合せの定義」を参照してください。「ビュー・オブジェクトのパフォーマンス・チューニング」で説明されている高度な機能についても理解しておくことをお薦めします。
ADFモデル・レイヤーを使用して、ビュー・ページを作成できます。この章でビュー・レイヤーのデータ・バインディングの仕組みに関する基本情報を確認した後、「データバインドされたWebユーザー・インタフェースの作成」で、データ・バインディングを使用して特定のビュー機能を作成する場合の詳細を参照してください。
ADFモデルとページ・ライフサイクルの連携の詳細は、「Fusionページ・ライフサイクルの理解」を参照してください。
モデル・レイヤーに影響を与える構成パラメータの詳細なリストは、「DataBindings.cpx」および「pageNamePageDef.xml」を参照してください。
バインディング・プロパティの詳細なリストは、「Oracle ADFバインディング・プロパティ」を参照してください。
アプリケーション・モジュールを作成すると、アプリケーション・モジュールのデータ・モデルに追加したオブジェクトに対してデータ・コントロールが作成されます。
注意:
その他の種類のビジネス・サービスに対してもデータ・コントロールを作成できます。『Oracle ADFデータ・コントロールによるアプリケーションの開発』の「ADFデータ・コントロールの使用」を参照してください。
ここで重要なことは、データ・コレクション、組込み操作およびサービス・メソッドに対してバインディング・オブジェクトが求めるインタフェースを、アプリケーション・モジュール・コンポーネントが直接実装することです。最適化されたこのような相互作用により、バインディングが次のように直接、データ・モデル内のアプリケーション・モジュール・インスタンスに作用します。
任意のビュー・オブジェクト・インスタンスのデフォルト行セットのデフォルト行セット・イテレータに直接バインドするイテレータ・バインディング。行セットのイテレータにより、現在のオブジェクトおよび現在のレンジ情報が管理されます。
ヒント:
イテレータ・バインディングを使用して、作成した名前付きのセカンダリ行セットにバインドすることもできます。セカンダリ行セット・イテレータにバインドするには、RSIName
を使用する必要があります。デフォルト行セットとセカンダリ行セットの違いと、それらの作成方法の詳細は、「複数の行セットと行セット・イテレータの使用」を参照してください。
次のいずれかに直接バインドするアクション・バインディング
データ・コントロールのクライアント・インタフェース上のカスタム・メソッド
アプリケーション・モジュールの組込み操作およびビュー・オブジェクト
図18-2に、UIコンポーネントをアプリケーション・モジュール・データ・コントロール・オブジェクトと結び付けるイテレータおよびアクション・バインディングの例を示します。
「データ・コントロール」パネルで、アイコンをパネルからページのビジュアル・エディタにドラッグ・アンド・ドロップして、データバインドされたUIコンポーネントを作成します。図18-3は、Oracle ADFのSummitサンプル・アプリケーションのデータ・コントロールを表示する「データ・コントロール」パネルを示しています。
図18-3 JDeveloperの「データ・コントロール」パネル
「データ・コントロール」パネルには、アプリケーションのビジネス・サービスに対して作成されたすべてのデータ・コントロールがリストされます。また、UIコンポーネントへのバインドに使用できるコレクション(データ・オブジェクトの行セット)、メソッドおよび組込み操作がすべて公開されます。
注意:
それらを公開するようにJDeveloperを構成している場合は、ビュー・リンク・アクセッサの戻り値も表示されます。詳細は、「マスター/ディテール階層における複数表の使用」を参照してください。ビュー・アクセッサ・メソッドの表示手順は、次のとおりです。
JDeveloperのメイン・メニューから、「ファイル」→「プリファレンス」を選択します。
「データ・コントロール」パネルのノードを選択します。
「基礎なるアクセッサ・ノードの表示」を選択して、チェック・ボックスをアクティブにします。
ビジネス・サービスを定義するためにADFビジネス・コンポーネントを使用するアプリケーションでは、「データ・コントロール」パネル上の各データ・コントロールは特定のアプリケーション・モジュールを表し、そのアプリケーションのデータ・モデルでビュー・オブジェクト・インスタンスを公開します。データ・コントロール内のオブジェクトの階層は、アプリケーション・モジュール・データ・モデル用に追加されているビュー・オブジェクト間のビュー・リンクによって定義されます。ビュー・オブジェクトおよびビュー・リンクの作成の詳細は、「ビュー・オブジェクトを使用したSQL問合せの定義」を参照してください。データ・モデルへのビュー・リンクの追加の詳細は、「データ・モデルでアクティブなマスター/ディテール調整を有効化する方法」を参照してください。
ヒント:
関連付けられたデータ・コントロール・オブジェクトを右クリックして、「定義の編集」を選択すると、ビュー・オブジェクトの概要エディタを開くことができます。
たとえば、BackOfficeAppModuleDataControl
は、企業の従業員が使用できるSummit ADFサンプル・アプリケーションのビジネス・サービス・レイヤーの一部を実装する、BackOfficeAppModule
アプリケーション・モジュールを表します。アプリケーション・モジュールのデータ・モデルには、複数のマスター/ディテール階層など、多数のビュー・オブジェクト・インスタンスが含まれています。Summit ADFサンプル・アプリケーションのビュー・レイヤーはJSFページで構成され、このページのUIコンポーネントは、BackOfficeAppModule
のデータ・モデル内のビュー・オブジェクト・インスタンスのデータと、そのクライアント・インタフェース上の組込み操作およびサービス・メソッドにバインドされています。
各ビュー・オブジェクト・インスタンスは、ビュー・オブジェクト・インスタンス名と対応する名前が付いたデータ・コレクションとして表示されます。図18-4は、BackOfficeAppModule
のデータ・モデル内のビュー・オブジェクト・インスタンスが「データ・コントロール」パネルでどのように表示されるかを示しています。「データ・コントロール」パネルは、マスター・データ・コレクションの下にネストされたディテール・データ・コレクションを表示することで、アプリケーション・モジュールのデータ・モデル内のマスター/ディテール階層を示します。
図18-4「データ・コントロール」パネルでのデータ・モデルの表示
「データ・コントロール」パネルは、アプリケーション・モジュールのクライアント・インタフェース上の任意のカスタム・メソッドも、メソッド名と対応する名前が付いたデータ・コントロール・カスタム操作として表示します。メソッドが引数を受け入れると、その引数は、操作ノード内にネストされた操作パラメータとして「パラメータ」ノードに表示されます。
アプリケーション・モジュール・データ・コントロールの「操作」フォルダ・ノードは、図18-5に示すように、Commit
およびRollback
という名前の2つのデータ・コントロール組込み操作を公開します。これらの操作は、実行時にデータ・バインディング・レイヤーによって起動されると、現在のアプリケーション・モジュール・インスタンスに関連付けられているTransaction
オブジェクトのcommit()
メソッドおよびrollback()
メソッドに委譲します。
注意:
多数のビュー・オブジェクト・インスタンスおよびカスタム・メソッドがあるアプリケーション・モジュールでは、データ・コントロールの直接の子ノードである「操作」ノードを見つけるには、「データ・コントロール」パネル表示のスクロールが必要な場合があります。このノードに、その組込み操作が含まれています。
ビュー・オブジェクト属性は、作成したカスタム・メソッドと同様、対応するデータ・コレクションの直接の子ノードとして表示されます。図18-6は、アプリケーション・モジュールのデータ・モデル内の各ビュー・オブジェクト・インスタンスが「データ・コントロール」パネルでどのように表示されるかを示しています。いずれかのカスタム・メソッドをビュー・オブジェクトのクライアント・インタフェースに表示することを選択している場合、そのメソッドは、同じレベルのビュー・オブジェクト属性のすぐ下にカスタム・メソッドとして表示されます。メソッドが引数を受け入れると、その引数は、ネストされた「パラメータ」ノードに操作パラメータとして表示されます。
デフォルトでは、ビュー・オブジェクトで問合せ可能な各属性に対して暗黙的なビュー基準が作成されます。それらは、図18-6に示すように、「名前付き基準」ノードの下に「すべての問合せ可能な属性」ノードとして表示されます。ビュー・オブジェクトに対して作成された名前付きビュー基準は「名前付き基準」ノードの下に表示されます。問合せで使用される結合と基準項目、ネストされた基準(該当する場合)が子として表示されます。これらのアイテムを使用して、「ADFによるデータバインドされた検索フォームの作成」で説明するような、クイック検索フォームを作成します。
図18-6に示すように、データ・コレクションの下の「操作」ノードには、そのコレクションで使用可能な組込み操作がすべて表示されます。操作で1つ以上のパラメータを受け入れると、そのパラメータは、ネストされた「パラメータ」ノードに表示されます。実行時に、これらのデータ・コレクション操作の1つがデータ・バインディング・レイヤーによって名前別に起動されると、アプリケーション・モジュールのデータ・コントロールは、組込み機能を処理するViewObject
インタフェース上の適切なメソッドにそのコールを委譲します。組込み操作は、現在の行に影響を与える操作、データ・コレクションをリフレッシュする操作、および他の全操作の3つのカテゴリに分類されます。
現在の行に影響を与える操作:
Create
: 現在の行になる新規行を作成するが、その行の挿入なし。
CreateInsert
: 現在の行となる新規行を作成し、新規の空白行をデータソースに挿入。
Create
with Parameters
: パラメータ値を使用して新しい行を作成。渡したパラメータによって、次の作成時の値を指定できます。
多相ビュー・オブジェクトの多相化識別子
多相ビュー・オブジェクトの作成に必要な、構成する側の親の外部キー属性
構成される側の子ビュー・オブジェクト行(親行のコンテキストで作成されない場合)
多相ビュー・オブジェクトの詳細は、「多相ビュー・オブジェクトの定義」を参照してください。
Delete
: 現在の行を削除。
First
: 現在の行を行セット内の最初の行に設定。
Last
: 現在の行を行セット内の最後の行に設定。
Next
: 行を行セット内の次の行に設定。
Next Set
: 1つ後の行のセットに移動します。
Previous
: 現在の行を行セット内の前の行に設定。
Previous
Set
: 1つ前の行セットに移動。
setCurrentRowWithKey:
パラメータとして渡された行キーのシリアライズされた文字列表現を使用して行の検索を試行。検出されると、その行が現在の行になります。
setCurrentRowWithKeyValue:
パラメータとして渡された主キーの属性値を使用して行の検索を試行。検出されると、その行が現在の行になります。
setCurrentRowWithKey
およびsetCurrentRowWithKeyValue
の使用方法の詳細は、「表での現在行の設定に関する必知事項」を参照してください。
データ・コレクションをリフレッシュする操作:
Execute
: ビュー・オブジェクトの問合せを実行または再実行してデータ・コレクションをリフレッシュ。バインド・パラメータがある場合、その値は現在の値のままになります。
ExecuteWithParams
: パラメータとして渡された名前付きのバインド変数に新しい値を割り当てた後で、ビュー・オブジェクトの問合せを実行または再実行することにより、データ・コレクションをリフレッシュ。
注意:
executeWithParams
操作は、設計時に1つ以上の名前付きバインド変数が定義されているビュー・オブジェクトの場合のみ表示されます。
他の全操作:
removeRowWithKey:
パラメータとして渡された行キーのシリアライズされた文字列表現を使用して行の検索を試行。検出されると、その行が削除されます。
Find
: データ・コレクションの検索モードのオンとオフの切替え。
他のアプリケーション・モジュールのネストされたインスタンスを組み込んで複合アプリケーション・モジュールを作成すると、「データ・コントロール」パネルではこのコンポーネント・アセンブリがツリー階層で表示されます。たとえば、Summit ADFサンプル・アプリケーションにはSummitAppModule
アプリケーション・モジュールが含まれ、これにはBackOfficeAppModule
およびCustomerSelfServiceAppModule
アプリケーション・モジュールのネストされたインスタンスが含まれます。ネストされたインスタンスはそれぞれ、BackOfficeAM
およびCustomerSelfServiceAM
と呼ばれます。図18-7に示すように、3つのアプリケーション・モジュールすべてに対してトップレベルのデータ・コントロールがあり、SummitAppModuleDataControl
データ・コントロールには、BackOfficeAM
およびCustomerSelfServiceAM
インスタンス用のサブノードがあります。
図18-7 「データ・コントロール」パネルでのネストされたアプリケーション・モジュールの表示
目的の用途に対応するデータ・コントロールからドラッグ・アンド・ドロップ・データ・バインディングを実行するよう注意する必要があります。パネル内のトップレベルの BackOfficeAppModuleDataControl
データ・コントロール・ノードからデータ・コレクションをドロップすると、実行時にページ上で、BackOfficeAppModule
コンポーネント・プールから取得したBackOfficeAppModule
アプリケーション・モジュールのインスタンスが使用されます。SummitAppModuleDataControl
のネストされたBackOfficeAM
のインスタンスのデータ・コレクションをドロップすると、実行時にページ上でSummitAppModule
コンポーネント・プールから取得したSummitAppModule
アプリケーション・モジュールのインスタンスが使用されます。各タイプのアプリケーション・モジュールのデータ・コントロールでは異なるトランザクションおよびデータベース接続が使用されるため、ネストされたアプリケーション・モジュールと最上位のデータ・コントロールの両方から不適切にデータ・コレクションを組み合せると、実行時に予期せぬ動作が発生します。
デフォルトで、ビュー・オブジェクトに定義した行検索は「データ・コントロール」パネルに表示されます。実行時に、名前付き基準内の行検索が検索パネルとして表示され、名前付き基準内の属性のみを表示します。演算子は表示されません。アプリケーションによって「データ・コントロール」パネルでコレクションとして公開されるビュー・オブジェクトの行検索マップ属性は、行検索の参照操作に使用できます。図18-8に、「データ・コントロール」パネル内の名前付き基準の下にある行検索を示します。
図18-8 「データ・コントロール」パネル内の行検索
アプリケーションでビュー・オブジェクト・インスタンスの行検索がプログラムにより呼び出された場合、またはエンド・ユーザーが行検索にマップされた属性の値をWebサービス・ペイロードで指定した場合は、行検索では、ビュー基準のバインド変数に入力した値に一致する行が特定されます。行検索では、一致する行の特定時に行セットの変更を行いません。
「データ・コントロール」パネルは、JDeveloperの最上部左側にある「アプリケーション」ウィンドウにあります。コンテンツを表示するには、パネル・ヘッダーをクリックしてパネルを展開します。パネル・ヘッダーが表示されていない場合、「アプリケーション」ウィンドウが表示されない場合があります。
「アプリケーション」ウィンドウと「データ・コントロール」パネルを開くには:
アプリケーション・モジュールまたは基礎となるサービスが変更されたら必ず、変更を表示するためにデータ・コントロールを手動でリフレッシュする必要があります。
「データ・コントロール」パネルをリフレッシュするには:
図18-10 「データ・コントロール」パネル
「リフレッシュ」をクリックすると、使用可能なすべてのデータ・コントロールが「データ・コントロール」パネルで検索され、データ・モデルに対して加えられた構造的な変更が反映されます。
別のプロジェクトで使用できるよう、データ・コントロールをパッケージ化できます。たとえば、ある開発グループがサービスおよびデータ・コントロールを作成している間に、別の開発グループがUIを作成する場合があります。最初のグループはサービスおよびデータ・コントロールを作成し、Oracle ADFライブラリとしてパッケージ化し、2番目のグループへ送信します。次に、2番目のグループは「リソース」ウィンドウを使用してそのプロジェクトにデータ・コントロールを追加できます。詳細は、「アプリケーション・コンポーネントの再利用」を参照してください。
「データ・コントロール」パネルから項目をドラッグし、それを特定のUIコンポーネントとしてページ上にドロップすることで、データバインドされたユーザー・インタフェースを設計できます。データ・コントロールを使用してUIコンポーネントを作成すると、そのコンポーネントを選択したデータ・コントロールにバインドするために必要な、様々なコードおよびオブジェクトがJDeveloperによって自動的に作成されます。
「データ・コントロール」パネルでは、各データ・コントロール・オブジェクトが特定のアイコンで表されます。表18-1は、各アイコンが表すもの、「データ・コントロール」パネルの階層内で表示される場所、およびそのアイコンを使用して作成できるコンポーネントを示しています。
表18-1 「データ・コントロール」パネルのアイコンおよびオブジェクト階層
アイコン | 名前 | 説明 | 作成する対象 |
---|---|---|---|
データ・コントロール |
データ・コントロールを表します。データ・コントロール自体を使用してUIコンポーネントを作成することはできませんが、その下に表示される子オブジェクトは、いずれも使用できます。ビジネス・サービスの定義方法によっては、複数のデータ・コントロールが存在することがあります。 通常、各アプリケーション・モジュールに対するデータ・コントロールは1つです。ただし、他のタイプのビジネス・サービス(Webサービスなど)に対して作成された追加のデータ・コントロールがある場合があります。 その他のビジネス・サービスのデータ・コントロールの作成の詳細は、『Oracle ADFデータ・コントロールによるアプリケーションの開発』の「ADFデータ・コントロールの使用」を参照してください。 |
他のオブジェクトのコンテナとして機能し、コンポーネント作成には使用されません。 |
|
コレクション |
名前付きデータ・コレクションを表します。データ・コレクションとは、データ・モデル内のデータ・オブジェクト・セット(行セットとも呼ばれる)です。データ・コレクション内の各オブジェクトは、データ・モデル内の特定の構造化データ項目(行とも呼ばれる)を表します。このガイド全体を通して、データ・コレクションおよびコレクションという用語は、区別なく使用されます。 アプリケーション・モジュールにおいて、データ・コレクションは、ビュー・オブジェクト・インスタンスに含まれているデフォルトの行セットです。コレクションの名前は、ビュー・オブジェクト・インスタンス名と一致します。 ビュー・リンクによって、2つのビュー・オブジェクト間にマスター/ディテール関係が作成されます。アプリケーション・モジュール・データ・モデルにディテール・ビュー・オブジェクト(ビュー・リンクからの結果)のインスタンスを明示的に追加する場合、そのディテール・ビュー・オブジェクトに含まれるコレクションは、マスター・ビュー・オブジェクトに含まれるコレクションの子として表示されます。データ・モデルへのディテール・ビュー・オブジェクトの追加の詳細は、「データ・モデルでアクティブなマスター/ディテール調整を有効化する方法」を参照してください。 コレクションの下の子は、コレクションの属性、ビュー・リンクによって関連付けられる他のコレクション、コレクションから値を戻すカスタム・メソッド、またはコレクションに対して実行できる組込み操作などです。 ビュー・リンク・アクセッサの戻り値を表示するようにJDeveloperを構成している場合は、それらも表示されます。 |
フォーム、表、グラフ、ツリー、レンジ・ナビゲーションの各コンポーネント、およびマスター/ディテール・コンポーネント。 データ・コントロールのコレクションを使用したフォーム作成の詳細は、「データバインドされた基本的なページの作成」を参照してください。 コレクションを使用した表作成の詳細は、「ADFによるデータバインドされた表の作成」を参照してください。 UIコンポーネントを作成するためのマスター/ディテール関係の使用の詳細は、「マスター/ディテール・データの表示」を参照してください。 グラフ、チャートおよびその他の視覚的なUIコンポーネントの作成の詳細は、「データバインドされたチャート・コンポーネントおよびゲージ・コンポーネントの作成」を参照してください。 |
|
属性 |
オブジェクト内の個別のデータ要素(行の属性など)を表します。属性は、自分の属するコレクションまたはメソッド戻りの下に、子として表示されます。 アプリケーション・モジュール・データ・コントロールの場合、対応するビュー・オブジェクトに含まれる属性のみが、コレクション下に表示されます。ビュー・オブジェクトが1つ以上のエンティティ・オブジェクトを結合する場合、ビュー・オブジェクトのコレクションには、すべての基礎となるエンティティ・オブジェクトから選択された属性が含まれます。 |
ラベル、テキスト・フィールド、日付、値リスト、および選択リストの各コンポーネント。 属性を使用してページ上にフィールドを作成する方法の詳細は、「データ・コントロール属性を使用したテキスト・フィールドの作成」を参照してください。 リスト作成の詳細は、「データバインドされた選択リストおよびシャトルの作成」を参照してください。 |
|
構造化属性 |
Javaプリミティブ・タイプ(属性として示される)または任意のタイプのコレクションのいずれでもない、戻りオブジェクトを示します。構造化属性の例としてドメインがあります。これはアプリケーションのメンテナンスを簡素化するために開発者によって作成されたデータ型です。 ドメインの詳細は、「ドメインを使用したカスタム検証済データ型の作成」を参照してください。 |
ラベル、テキスト・フィールド、日付、値リスト、および選択リストの各コンポーネント。 |
|
メソッド |
データ・コントロールの操作またはその公開された構造のいずれかを表し、パラメータの受入れや、ビジネス・ロジックの実行を行ったり、オプションで単一の値、構造またはコレクションを戻すことができます。 アプリケーション・モジュール・データ・コントロールでは、カスタム・メソッドがアプリケーション・モジュール自体の中で定義され、通常は、何も戻さないか、単一のスカラー値を戻します。カスタム・メソッドの作成の詳細は、「アプリケーション・モジュールによるビジネス・サービスの実装」を参照してください。 |
コマンド・コンポーネント パラメータを受け入れるメソッドの場合: コマンド・コンポーネントおよびパラメータ付きフォーム。 |
|
メソッドの戻り値 |
カスタム・メソッドによって戻されたオブジェクトを表します。戻されたオブジェクトは、単一の値またはコレクションです。 アプリケーション・モジュールで定義されたカスタム・メソッドから戻されるのは通常、単一のスカラー値です。データへの最新の変更の表示はデータ・モデルのビュー・オブジェクトによって処理されるため、アプリケーション・モジュール・メソッドでビュー・レイヤーにデータのセットを戻す必要はありません(詳細は、「実行時のビュー・オブジェクトとエンティティ・オブジェクトの連携処理」を参照)。ただし、非アプリケーション・モジュール・データ・コントロールのカスタム・メソッド(CSVファイルのデータ・コントロールなど)は、ビュー・レイヤーにコレクションを戻すことができます。 メソッド戻りは、これを戻すメソッドの下に、子として表示されます。メソッド戻りの下に子として表示されるオブジェクトは、コレクションの属性、親コレクションに関連するアクションを実行する他のメソッド、または親コレクションで実行できる操作などです。 |
コレクションおよび属性と同じコンポーネント。 単一値のメソッド戻り値がドロップされると、メソッドはフレームワークにより自動的に起動されなくなります。メソッドを起動するために、対応するメソッドをボタンとしてドロップできます。フォームがタスク・フローの一部の場合、メソッドを起動するためのメソッド・アクティビティを作成できます。実行可能ファイルの詳細は、「ページ定義ファイルで定義されるExecutablesバインディング・オブジェクト」を参照してください。 |
|
操作 |
親オブジェクトに対してアクションを実行する、組込みデータ・コントロール操作を表します。データ・コントロール操作は、コレクションまたはメソッド戻り値の下の「操作」 ノードと、ルート・データ・コントロール・ノードの下にもあります。特定のコレクションまたはメソッド戻りの子である操作は、それらのオブジェクトにのみ作用し、データ・コントロール・ノードの下の操作は、そのデータ・コントロール内のすべてのオブジェクトに作用します。 1つ以上のパラメータが操作に必要な場合、それらのパラメータは操作の下の「パラメータ」ノードにリストされます。 |
ボタン、リンクおよびメニューなどのUIコマンド・コンポーネント。 詳細は、「データ・コントロール操作を使用したコマンド・コンポーネントの作成」および「既存レコードを編集するフォームの作成」を参照してください。 |
|
パラメータ |
メソッドまたはその下に表示される操作によって宣言されたパラメータ値を表します。パラメータは、メソッドまたは操作の下の「パラメータ」ノード内に表示されます。 |
ラベル、テキストおよび選択リストの各コンポーネント。 |
|
名前付き基準 |
ユーザー検索フォームを作成できる問合せを表します。 「すべての問合せ可能な属性」基準が各アクセッサ・コレクションについて自動的に生成されます。この問合せを使用して、コレクション内の任意の問合せ可能な属性に基づき、ユーザーが問合せを実行できる検索フォームを作成できます。 カスタム・ビュー基準を作成し、「データ・コントロール」パネルに追加できます。「名前付きビュー基準の処理」を参照してください。 |
検索フォームの作成の詳細は、「ADFによるデータバインドされた検索フォームの作成」を参照してください。 |
JDeveloperは、ドロップするデータ・コントロール項目に対してそれぞれ選択できるUIコンポーネントの事前定義済セットを備えています。
始める前に:
「データ・コントロール」パネルの各種オブジェクトに関する知識があると役立つ場合があります。詳細は、「データ・コントロール・パネルの使用」を参照してください。
次のタスクを完了する必要があります。
「アプリケーション・モジュールの作成と変更」の説明に従って、データ・モデルで必要なビュー・オブジェクトのインスタンスを含むアプリケーション・モジュールを作成します。または、別のタイプのビジネス・サービスを使用している場合は、『Oracle ADFデータ・コントロールによるアプリケーションの開発』のデータ・コントロールを使用したビジネス・サービスの公開に関する項の説明に従って、そのビジネス・サービスのデータ・コントロールを作成します。
「Webページの作成」の説明に従って、JSFページを作成します。
「データ・コントロール」パネルを使用してUIコンポーネントを作成するには:
Oracle ADF WebアプリケーションはJSFフレームワークを使用して作成されますが、ADFデータバインドUIコンポーネントを含むページのレンダリングおよび処理を行うために、いくつかの追加アプリケーション・オブジェクト定義が必要になります。「データ・コントロール」パネルを使用しない場合、これらの様々なファイルを手動で構成する必要があります。一方、「データ・コントロール」パネルを使用した場合は、必要なすべての手順がJDeveloperによって行われます。
DataBindings.cpx
ファイルがプロジェクトのデフォルト・パッケージに作成されます(このファイルが存在しない場合のみ)。また、そのページ用にエントリが追加されます。
DataBindings.cpx
ファイルは、アプリケーションのバインディング・コンテキストを定義します。バインディング・コンテキストはコンテナ・オブジェクトの1つで、使用可能なデータ・コントロールおよびデータ・バインディング・オブジェクトのリストを含みます。詳細は、「実行時に行われる処理: バインディング・コンテキストの動作方法」を参照してください。各DataBindings.cpx
ファイルによって、個々のページがページ定義ファイルに含まれるバインディング定義にマップされ、これらのページが使用するデータ・コントロールが登録されます。詳細は、「DataBindings.cpxファイルの使用」を参照してください。
META-INFディレクトリにadfm.xml
ファイルが作成されます。このファイルにより、DataBindings.cpx
ファイルのレジストリが作成され、バインディング・コンテキストを作成できるように、実行時にアプリケーションで特定できます。
web.xml
ファイルにADFバインディング・フィルタが登録されます。
このADFバインディング・フィルタによって、バインディング・コンテキストへのアクセスに必要なHTTPリクエストが事前処理されます。バインディング・フィルタの構成の詳細は、「ADFバインディング・フィルタの構成」を参照してください。
必要に応じて、次のようなライブラリをビュー・オブジェクトに追加します。
ADF Facesデータバインディング・ランタイム
Oracle XML Parserバージョン2
JDeveloperランタイム
ADFモデル・ランタイム
BC4Jランタイム
Oracle JDBC
Connection Manager
BC4J Oracleドメイン
パッケージ定義ファイルがページ定義サブパッケージに追加されます(ページに対してファイルが存在しない場合)。デフォルトのサブパッケージは、adfmsrc
ディレクトリにあるview.pageDefs
です。
ヒント:
「プロジェクト・プロパティ」ダイアログ(プロジェクト・ノードをダブルクリックするとアクセスできる)のADFモデル設定ページで、パッケージ構成(名前と場所など)を設定できます。
ページ定義ファイル(pageName
PageDef.xml
)は、アプリケーションのビュー・レイヤーにある各ページのADFバインディング・コンテナを定義します。バインディング・コンテナでは、ページのすべてのADFバインディング・オブジェクトへのランタイム・アクセスが行われます。ページ定義ファイルを使用して、特定のUIコンポーネントに対するバインディング・オブジェクト定義を定義および編集する方法は、後の章で説明します。ページ定義ファイルの詳細は、「ページ定義ファイルの処理」を参照してください。
ページ定義ファイルが構成されます。この処理では、ページによって参照されるバインディング・オブジェクトの定義も追加されます。
ADF FacesコンポーネントがJSFページに追加されます。
これらの事前作成済のコンポーネントには、ページ定義ファイルのバインディング・オブジェクトを参照するADFデータ・バインディング式言語(EL)式が含まれます。詳細は、「ADFデータ・バインディングのEL式の作成」を参照してください。
すべてのライブラリ、ファイル、およびADF Facesコンポーネントが必要とする構成要素が追加されます。詳細は、『Oracle ADF FacesによるWebユーザー・インタフェースの開発』の付録「ADF Facesの構成」を参照してください。
ページにADFバインディングが含まれている場合、実行時には、クライアントまたはコントローラから起動されたビジネス・サービスとのやり取りが、バインディング・コンテキストと呼ばれるシングル・オブジェクトを介して、アプリケーションによって管理されます。バインディング・コンテキストは、アプリケーション内のすべてのデータ・コントロールおよびページ定義のランタイム・マップ(名前付きdataでEL式#{data}
を使用してアクセス可能)です。
図18-14に示すように、ADFライフサイクルでは、アプリケーション・モジュールDataBindings.cpx
およびページ定義ファイルから、Oracle ADFバインディング・コンテキストが作成されます。設計時に使用可能なデータ・コントロールは、すべてのDataControls.dcx
ファイルとワークスペース内のすべてのアプリケーション・モジュールの集合体によって定義されますが、実行時にアプリケーションで使用可能なデータ・コントロールは、DataBindings.cpx
ファイルで定義されます。DataBindings.cpx
ファイルは、アプリケーションのページで使用されているデータ・コントロールをリストに表示し、ページ定義ファイルに定義したバインディング・オブジェクトが格納されているバインディング・コンテナをWebページのURLにマップします。ページ定義ファイルは、アプリケーション・ページで使用するバインディング・オブジェクトを定義します。各ページにページ定義ファイルが1つあります。
バインディング・コンテキストには、これらのオブジェクトの現在の実際のインスタンスは含まれていません。かわりに、マップには必要に応じてデータ・コントロールまたはバインディング・コンテナ・オブジェクトになる参照が含まれます。たとえば、オブジェクト(ページ定義など)がアプリケーションから解放されるか、タスク・フローが終了するか、リクエストの終了時にバンディング・コンテナまたはデータ・コントロールが解放されると、データ・コントロールおよびバンディング・コンテナは参照オブジェクトに戻ります。ADFライフサイクルの詳細は、「Fusionページ・ライフサイクルの理解」を参照してください。
注意:
アプリケーション・モジュール・データ・コントロールは、アプリケーション・モジュール・プーリングも活用します。アプリケーション・モジュールのデータ・コントロールは、リクエスト開始時に使用可能なアプリケーション・モジュール・インスタンスを自動的に取得するアプリケーション・モジュール・プールのシン・アダプタです。現在のリクエスト中に、アプリケーション・モジュールのデータ・コントロールにより、現在のユーザー・セッションのかわりに、アプリケーション・モジュール・インスタンスへの参照が保持されます。リクエスト終了時に、インスタンスは、データ・コントロールによって解放され、プールに戻されます。詳細は、「実行時に行われる処理: アプリケーションでアプリケーション・モジュール・プーリングと状態管理が使用される場合」を参照してください。
DataBindings.cpx
ファイルでは、アプリケーション全体のバインディング・コンテキストが定義されます。実行時にはこのメタデータから、Oracle ADFバインディング・オブジェクトが作成されます。たとえばリージョンなどのコンポーネントがプロジェクトの外で作成され、インポートされた場合は、アプリケーションに複数のDataBindings.cpx
ファイルが存在することがあります。これらのファイルは個々のページをページ定義ファイルにマップし、どのデータ・コントロールをアプリケーションで使用するかを宣言します。実行時には、DataBindings.cpx
ファイルにリストされたデータ・コントロールのみが、現在のアプリケーションで使用可能になります。
初めて「データ・コントロール」パネルを使用して、ページにコンポーネントを追加したり、アクティビティに操作を追加する際には、JDeveloperによって、ビュー・プロジェクトのデフォルト・パッケージ内に、DataBindings.cpx
ファイルが自動的に作成されます。このファイルは、プロジェクトのadfmsrc
ディレクトリにあります。DataBindings.cpx
ファイルが作成されると、最初のページまたはタスク・フロー・アクティビティ用のエントリが自動的に追加されます。その後、「データ・コントロール」パネルを使用するたびに、そのページまたはアクティビティ用のエントリがまだない場合は、エントリがDataBindings.cpx
に追加されます。
ヒント:
JDeveloperではリファクタをサポートしています。つまり、DataBindings.cpx
ファイルで参照されている多くのオブジェクトを安全に移動したり名前を変更することが可能になり、参照が更新されます。詳細は、「Fusion Webアプリケーションのリファクタ」を参照してください。
JDeveloperによりDataBindings.cpx
ファイルが作成されると、そのファイルを概要エディタで開くことができます。図18-15は、概要エディタで表示される、Summit ADFサンプル・アプリケーションからのDataBindings.cpx
ファイルを示しています。
次の例は、Summit ADFサンプル・アプリケーションの.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名を変更できます。そうすると、アプリケーションのすべての参照が更新されます。ただし、JDeveloperで更新されるのはID名のみであり、ファイル名は更新されません。データ・コントロール名を予約語に変更しないようにしてください。詳細は、「既存のアプリケーション・モジュールの編集方法」を参照してください。
「構造」ウィンドウで要素をクリックし、「プロパティ」ウィンドウを使用してプロパティ値を変更することもできます。DataBindings.cpx
ファイルの要素および属性の詳細は、「DataBindings.cpx」を参照してください。
ADFバインディング・フィルタはサーブレット・フィルタの1つで、oracle.adf.model.servlet.ADFBindingFilter
クラスのインスタンスです。ADF Webアプリケーションは、ADFバインディング・フィルタを使用して、バインディング・コンテキストへのアクセスが必要なすべてのHTTPリクエストを前処理します。これを行うには、ADFバインディング・フィルタがアプリケーションに存在するすべてのDataBindings.cpx
ファイルを認識している必要があります。
「データ・コントロール」パネルを使用して、初めてデータバインド・コンポーネントをページに追加する際には、JDeveloperによって、アプリケーションのweb.xml
ファイル内にフィルタが自動的に構成されます。
バインディング・フィルタを構成するために、JDeveloperによって、次の要素がweb.xml
ファイルに追加されます。
ADFバインディング・フィルタ・クラス: javax.servlet.Filter
インタフェースを実装するバインディング・フィルタ・オブジェクトの名前を指定します。
次の例に示すように、ADFバインディング・フィルタはweb.xml
ファイルで定義されます。filter-name
要素は値adfBindings
を含む必要があり、filter-class
要素はバインディング・フィルタ・クラスの完全修飾名oracle.adf.model.servlet.ADFBindingFilter
を含む必要があります。
<filter> <filter-name>adfBindings</filter-name> <filter-class>oracle.adf.model.servlet.ADFBindingFilter</filter-class> </filter>
フィルタ・マッピング:フィルタをWebアプリケーション内の静的リソースまたはサーブレットにリンクします。
実行時にマップ済リソースが要求されると、フィルタが起動します。フィルタ・マッピングは、web.xml
ファイルで次の例のように定義されます。filter-name
要素は値adfBindings
を含む必要があります。
<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コンテキストに依存するすべてのフィルタの前に表示されます。
ADFバインディング・フィルタは、実行時に次の機能を実行します。
フィルタを初期化する際に、web.xml
ファイルでフィルタ・パラメータとして指定されている名前で、文字コードをオーバーライドします。フィルタinit-param
要素のパラメータ名は、encoding
です。
Fusion Webアプリケーションの実行コンテキストであり、セキュリティ・コンテキスト、リクエストとレスポンスのオブジェクトを含む環境クラスなどのADFのコンテキスト情報が含まれるADFContext
オブジェクトをインスタンス化します。
ユーザーのHTTPセッションのバインディング・コンテキストを初期化します。バインディング・コンテキストを初期化するには、まず現在のプロジェクトのadfmsrc
ディレクトリにあるDataBindings.cpx
ファイルの定義に従ってバインディングをロードします。アプリケーションに別のプロジェクトからインポートされたDataBindings.cpx
ファイルが含まれている場合、これらのファイルはアプリケーションのクラス・パスにあります。さらにフィルタにより、アプリケーションのクラス・パスで見つかった補助.cpx
ファイルがロードされます。
同じブラウザ(フレームセットなど)から送信されるHTTPリクエストをシリアライズし、マルチスレッドの問題を回避します。
リクエストが送信されることをデータ・コントロール・インスタンスに通知し、リクエストごとに必要な設定が行われるようにします。
レスポンスがクライアントに送信された後でデータ・コントロール・インスタンスに通知し、リクエストごとに必要なクリーンアップが行われるようにします。
ページ定義ファイルは、実行時にUIコンポーネントにデータを移入するバインディング・オブジェクトを定義します。ADFバインディングを持つすべてのページには、対応するページ定義ファイルが必要です。このファイルには、そのページで使用するバインディング・オブジェクトの定義が含まれています。ページ定義ファイルによって、すべてのADFバインディングに設計時アクセスが提供されます。実行時には、ページ定義ファイルによって定義されたバインディング・オブジェクトが、ページ定義ファイルの実行時インスタンスであるバインディング・コンテナ内でインスタンス化されます。
注意:
同じページに複数のウィンドウが開いていると、ADFコントローラによって各ウィンドウに独自のDataControlFrame
が割り当てられます。これにより、各ウィンドウが独自のバインディング・コンテナを持つようになります。
「データ・コントロール」パネルを初めて使用してページにコンポーネントを追加する際には、JDeveloperによって、そのページのページ定義ファイルが自動的に作成され、コンポーネントが参照する各バインディング・オブジェクトの定義が自動的に追加されます。それ以降、ページにデータバインド・コンポーネントを追加するたびに、JDeveloperによって、必要なバインディング・オブジェクト定義がページ定義ファイルに自動的に追加されます。
デフォルトでは、ページ定義ファイルは、ビュー・プロジェクトのApplication Sourcesノードにあるview.PageDefs
パッケージに含まれています。対応するJSFページがデフォルト(public_html
)以外のディレクトリ、またはデフォルトのサブディレクトリに保存されると、ページ定義も同じ名前のペッケージに保存されます。たとえば、JSFファイルをpublic_html\myDirectory
ディレクトリ日本すると、ページ定義がmyDirectory
パッケージに保存されます。ページ定義ファイルの場所は、「プロジェクト・プロパティ」ダイアログのADF Model設定ページを使用して変更できます。
JDeveloperによるページ定義ファイルの命名には、次の規則が使用されます。
pageName
PageDef.xml
pageName
は、JSFページまたはフラグメントの名前です。つまり、JSFページの名前がindex.jsf
の場合は、デフォルトのページ定義ファイル名はindexPageDef.xml
になります。ページをサブディレクトリに組み入れる場合、JDeveloperでは、次の規則を使用してディレクトリ名をページ定義ファイル名の接頭辞にします。
directoryName
_
pageName
PageDef.xml
ヒント:
タスク・フローのページ定義は、同じ命名規則に従います。
ページ定義ファイルを開くには、ビジュアル・エディタでページまたはアクティビティを右クリックし、「ページ定義に移動」を選択するか、JSFページの場合は、エディタの「バインディング」タブをクリックして、「ページ定義ファイル」リンクをクリックします。
ヒント:
JDeveloperでは、「データ・コントロール」パネルを使用してコンポーネントを作成する場合にはJSFページのページ定義、項目をアクティビティにドロップする場合にはタスク・フローのページ定義が自動的に作成されますが、関連付けられたJSFページやタスク・フロー・アクティビティを削除してもページ定義は削除されません。(ADFデスクトップ統合の機能を使用する場合など、バインディングが必要になる場合でも、JSFページを使用せずに残すことができます。)ページ定義が不要になった場合、ページ定義とそのページ定義への参照はすべて手動で削除する必要があります。ただし、対応するページまたはアクティビティがコールされないかぎり、ページ定義を使用してバインディング・コンテキストが作成されることはありません。したがって、必ずしもアプリケーションから未使用のページ定義ファイルを削除する必要があるわけではありません。
JDeveloperでページ定義ファイルが作成されると、概要エディタに表示されます。図18-16は、Summit ADFサンプル・アプリケーションのOrders.jsff
ページに対して作成された概要エディタのページ定義ファイルを示しています。
概要エディタには次のタブが含まれており、これらを使用してバインディング、コンテキスト・イベント、ページのパラメータを表示および構成できます。
バインディングと実行可能ファイル: 概要エディタのページ定義の「バインディングと実行可能ファイル」タブでは、Bindings、Executablesおよび関連付けられたData Controlsの3つの異なるタイプのオブジェクトが表示されます。(BindingsとExecutablesは、選択しないかぎりデータ・コントロールには表示されません。)たとえば、図18-16では、LastName
属性のバインディングはOrdersForCustomerIterator
イテレータを使用して値を取得していることがわかります。イテレータは、BackOfficeAppModuleDataControl
データ・コントロールのOrdersForCustomer
コレクションにアクセスしています。「ページ定義ファイルで定義されるExecutablesバインディング・オブジェクト」を参照してください。
デフォルトでは、モデル・バインディング・オブジェクトは、そのオブジェクトを作成するために使用されたデータ・コントロール・オブジェクトの名前が付けられます。データ・コントロール・オブジェクトが1ページ内で何度も使用される場合、JDeveloperではデフォルトのバインディング・オブジェクト名に数字を追加して、それぞれが一意になるようにします。「ADFデータ・バインディングのEL式の作成」は、ADFデータ・バインディングEL式によるバインディング・オブジェクト名の参照方法について説明しています。
表18-2は、概要エディタで表示される各バインディング・オブジェクトのアイコンを示しています(エディタの「パラメータ」セクションでパラメータ・オブジェクトが表示されますが、これらもバインディング・オブジェクトとみなされます)。
表18-2 バインディング・オブジェクト・アイコン
バインディング・オブジェクト型 | アイコン | 説明 |
---|---|---|
パラメータ |
パラメータ・バインディング・オブジェクトを表します。 |
|
バインディング |
属性値のバインディング・オブジェクトを表します。 |
|
リスト値のバインディング・オブジェクトを表します。 |
||
ツリー値のバインディング・オブジェクトを表します。 |
||
メソッドのアクション・バインディング・オブジェクトを表します。 |
||
バインディング/実行可能ファイル |
アクション・バインディング・オブジェクトを表します。 |
|
実行可能ファイル |
イテレータ・バインディング・オブジェクトを表します。 |
|
タスク・フローのExecutablesバインディング・オブジェクトを表します。 |
||
名前付き基準オブジェクトがページに追加される際に使用される、検索リージョン・バインディング・オブジェクトを表します。 |
コンテキスト・イベント: アプリケーション内のアーティファクトが登録可能なコンテキスト・イベントを作成できます。たとえば、コンテキスト・イベントを顧客登録ページに使用して、適切な情報トピックを表示できます。ページ内の一方のリージョンには顧客登録タスク・フローを含め、他方には情報トピックのタスク・フローが含めることができます。コンテキスト・イベントが顧客登録リージョンから情報トピック・リージョンに渡され、情報トピック・タスク・フローに正しい情報トピックを表示します。設計時はイベント名、プロシージャ・リージョン、消費者ハンドラ、その他の情報が、ページ定義ファイルのイベント・マップ・セクションに保存されます。「コンテキスト・イベントの使用」を参照してください。
パラメータ: パラメータ・バインディング・オブジェクトは、リクエストの開始時にページが評価するパラメータを宣言します。ADFライフサイクルの詳細は、「Fusionページ・ライフサイクルの理解」を参照してください。そのようなパラメータは、「タスク・フローのパラメータの使用」で説明されているように、タスク・フローから渡すこともできます。
静的値または静的値を割り当てるEL式を使用して、ページ定義ファイルのパラメータ値を定義できます。次の例は、EL式を使用して値を割り当てるパラメータ・バインディング・オブジェクトを示しています。
<parameters> <parameter name="productId" value="${payLoad}"/> </parameters>
ヒント:
パラメータ値のEL式では、ドル記号($)が使用されます。これは、これらの式を積極的に解決し、ページのレンダリング時に結果を即座に戻すようにする必要があるためです。JSFアプリケーションのほとんどのEL式ではハッシュ記号(#)が使用され、モデルの準備ができてから値がアクセスされるように式の評価が遅延されます。
概要エディタの項目(または「構造」ウィンドウの関連付けられたノード)をクリックすると、「プロパティ」ウィンドウを使用してその項目の属性値を表示および編集したり、「ソース」タブをクリックしてXMLソースを直接編集できます。次の例は、図18-16に示すページ定義ファイルから抜粋したXMLコードを示しています。
<?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コンポーネントに対するバインディングを定義および編集する方法は、後の章で説明します。ページ定義ファイルで使用できるすべての要素および属性の説明は、「pageNamePageDef.xml」を参照してください。
UIコンポーネントをデータ・コントロールのオブジェクトにバインドする場合に使用するバインディング・オブジェクトは3種類あります。
値: イテレータ・バインディングを参照してUIコンポーネントにデータを表示します。データ・コントロールからデータを表示するページ上の個別UIコンポーネントは、それぞれ値バインディング・オブジェクトにバインドされます。値バインディング・オブジェクトの種類は、次のとおりです。
属性値: テキスト・フィールドをオブジェクト(属性バインディング・オブジェクトとも呼ばれます)内の特定の属性にバインドする
リスト: データ・コレクション内でリスト・アイテムを属性のすべての値にバインドします。
ツリー: 表全体をデータ・コレクションにバインドし、ツリーのルート・ノードをデータ・コレクションにバインドすることもできます。
ボタン(boolean): チェック・ボックスを属性のブール値にバインドします。
グラフ: グラフを直接ソース・データにバインドします。
メソッド・アクション: ボタンやリンクなどのコマンド・コンポーネントをデータ・コントロール上のカスタム・メソッドにバインドします。メソッド・アクション・バインディング・オブジェクトは、メソッドの起動方法およびメソッドが取得するパラメータ(該当する場合)の詳細をカプセル化します。
アクション: ボタンやリンクなどのコマンド・コンポーネントを組込みデータ・コントロール操作(CommitやRollbackなど)または組込みコレクションレベル操作(Create、Delete、Next、Previousなど)にバインドします。
次の例は、サンプルのbindings
要素の抜粋を示しています。特に、要素は表のツリー・バインディング、テキスト・フィールドのいくつかの属性バインディング、CreateInsert
組込み操作のアクション・バインディング、およびselectOneChoice
コンポーネントのリスト・バインディングを定義します。
<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
属性は、表に表示されるデータを管理するイテレータ・バインディングを参照します。詳細は、「ページ定義ファイルで定義されるExecutablesバインディング・オブジェクト」および「表のイテレータと値バインディング」を参照してください。
attributeValues
要素は、ページ上のテキスト・フィールドに対して値バインディングを定義します。例では、ShortDesc
属性バインディングによりShortDesc
の値が表示され、この値がAttrNames
要素に定義されます。IterBinding
属性は、テキスト・フィールドに表示されるデータを管理するイテレータ・バインディングを参照します。詳細は、「テキスト・フィールドの作成時の処理」を参照してください。
action
要素で定義されたバインディング・オブジェクトは、ItemsForOrder
コレクションにある組込みCreateInsert
操作を起動するために必要な情報をカプセル化します。RequiresUpdateModel
属性のtrue
の値は、操作を実行する前にモデル・レイヤーを更新する必要があることを指定します。詳細は、「操作を使用したコマンド・コンポーネント作成時の処理」を参照してください。
この操作により、コンテキスト・イベントが発生した場合、イベント定義も表示されます。イベントを使用するバインディングがページに含まれている場合、イベント・マッピングが表示されます。詳細は、「コンテキスト・イベントの使用方法」を参照してください。
PaymentType
要素により、LOV_PaymentTypeId
LOVを使用して支払いタイプ・コードのリストを表示するために使用される、リスト・バインディングが定義されます。ビュー・オブジェクトのLOVを使用したリスト作成の詳細は、「データバインドされた選択リストおよびシャトルの作成」を参照してください。
Executablesバインディング・オブジェクトには次の種類があります。
イテレータ: ビュー・オブジェクト・コレクション全体で反復処理するイテレータにバインドします。ページで使用されるコレクションごとに1つのイテレータ・バインディングがあります。ページ上のすべての値バインディングはイテレータ・バインディングを参照して、実行時にデータを伴って移入されたコンポーネント値を含む必要があります。
コレクションまたはコレクションの属性をページ上にドロップすると、イテレータ・バインディングが自動的に実行可能ファイルとして追加されます。イテレータ・バインディング・オブジェクトは、基礎となるADFのRowSetIterator
オブジェクトにバインドされます。このオブジェクトは現在のオブジェクトと現在の範囲情報を管理します。イテレータ・バインディングは、そのページで使用されている他のバインディング・オブジェクトに、現在のオブジェクトと範囲状態を公開します。
デフォルトでは、イテレータ・バインディングは、送信されたデータ変更を、そのデータがコミットされてデータソースに戻されるまでキャッシュするように構成されます。データ変更が送信されると、イテレータに関連付けられたバインディングを持つページ上のすべてのコンポーネントがリフレッシュされ、変更されたデータが表示されます。詳細は、「部分ページ・レンダリングおよびイテレータ・バインディングに関する必知事項」を参照してください。
イテレータの範囲は、そのページに表示する現在のオブジェクト・セットを表します。現在の範囲内の最大オブジェクト数は、イテレータのrangeSize
属性で定義されています。たとえば、データ・コントロール内のコレクションに製品が含まれており、イテレータ範囲が25の場合は、コレクション内の最初の25の製品がページ上に表示されます。ユーザーがスクロール・ダウンすると、次の25製品が表示されます。ユーザーがスクロール・アップすると、前の25製品が表示されます。ビュー・オブジェクトで範囲ページ移動を使用している場合は、イテレータ・バインディングで範囲セットを一度に戻すように設定できます。詳細は、「大きい結果セットを効率的にスクロールするための範囲ページ移動の使用方法」を参照してください。
注意:
ページが2ページあり、それぞれイテレータ・バインディングが同じビュー・オブジェクトのイテレータにバインドされている(たとえば、異なる2ページに同じコレクションをドロップした)場合、両方のページのイテレータ・バインディングでrangeSize
属性を同じにする必要があります。この属性が同じでないと、レンジ・サイズが小さい方のページによりイテレータが再実行され、他のページに予期しない結果が生じる可能性があります。
メソッド・イテレータ:データ・コントロールでカスタム・メソッドによって戻されるコレクション全体で反復処理するイテレータにバインドします。
メソッド・イテレータ・バインディングは、常にメソッド・アクション・バインディング・オブジェクトに関連しています。メソッド・アクション・バインディングは、メソッドの起動方法およびメソッドが取得するパラメータ(該当する場合)の詳細をカプセル化します。メソッド・アクション・バインディング自体がメソッド・イテレータにバインドされ、データが提供されます。
データ・コントロールのカスタム・メソッドから、メソッド戻りコレクションまたはメソッド戻りコレクションの属性をページ上にドロップする場合のみ、メソッド・イテレータのExecutablesバインディング・オブジェクトが表示されます。アプリケーション・モジュール・データ・コントロールのみを使用する場合、イテレータ・バインディング・オブジェクトのみが表示されます。
変数イテレータ:バインディング・コンテナ内のすべての変数を他のバインディングに公開するイテレータにバインドします。コレクションごとにイテレータ・バインディングがありますが、1ページで使用されているすべての変数には、1つの変数イテレータ・バインディングしかありません。(変数イテレータは、バインディング・コンテナ変数を属性として持つ、単一のデータ・オブジェクトだけが含まれたコレクションを指すイテレータのようなものです。)
ページの変数は、バインディング・コンテナに対してローカルであり、バインディング・コンテナ・オブジェクトが存在する間のみ存在します。ページから収集したパラメータが要求されるデータ・コントロール・メソッドまたはデータ・コントロール操作を使用する際には、JDeveloperによって、ページ定義ファイル内のパラメータの変数が自動的に定義されます。属性バインディングは、ページ変数を参照できます。
変数イテレータには、variable
およびvariableUsage
の2種類の変数のうち1つを含むことができます。variable
タイプ変数は単純な値ホルダーですが、variableUsage
タイプ変数は、ビュー・オブジェクトの名前付きバインド・パラメータに関連する値ホルダーです。変数をvariableUsage
タイプとして定義すると、バインドされるビュー・オブジェクトの名前付きバインド変数からデフォルト値やUIコントロール・ヒントを継承できるようになります。
ページ: テンプレートのページ定義ファイルにバインドします(テンプレートを使用している場合)。テンプレートを使用した作業の詳細は、「ページ・テンプレートの使用方法」を参照してください。
注意:
page
要素を使用して別のページ定義ファイルにバインドすることもできます。ただし、実行時には、現在の受信ページ(レンダリングされたページが受信ページと異なる場合は、レンダリングされたページ)のバインディング・コンテナのみが、現在のリクエスト中にフレームワークにより自動的に作成されます。したがって、現在のページから別のページのバインド値にアクセスするには、(たとえば、バッキングBeanを使用して)現在のリクエストにそのページのバインディング・コンテナをプログラムで作成する必要があります。作成しない場合、そのページのバインド値は利用できなくなるか、現在のリクエストで有効にできません。
検索するリージョン: 検索が実行できるよう、名前付き基準をイテレータにバインドします。
タスク・フロー: リージョンのタスク・フローのバインディング・コンテナをインスタンス化します。
複数タスク・フロー: リージョンのタスク・フローのバインディング・コンテナを、タスク・フローの配列からインスタンス化します。これは、不明な数のリージョンを含むページで役立ちます。たとえば、panelTabbed
コンポーネントの各タブがリージョンで、ユーザーが実行時にタブを追加および削除できるような場合です。詳細は、「複数の不明なリージョンをレンダリングするページの構成」を参照してください。
実行時には、ExecutableバインディングはそのRefresh
属性の値に基づいてリフレッシュされます。イテレータ・バインディングをリフレッシュすると、そのバインディングの基礎となるRowSetIterator
オブジェクトにバインディングを再接続します。バインディングをリフレッシュする前に、ADFランタイムにより、実行可能ファイルで指定されたRefresh
属性およびRefreshCondition
属性がすべて評価されます。Refresh
属性は、実行可能ファイルが起動されるADFライフサイクル・フェーズを指定します。RefreshCondition
属性は、実行可能ファイルが起動される条件を指定します。ブールEL式を使用して、RefreshCondition
値を指定できます。RefreshCondition
属性を空白のままにする場合は、true
と評価されます。
デフォルトでは、Refresh
値はdeferred
に設定されています。これは、バインディングが(たとえば、JSFページのEL式から)アクセスされないかぎり実行されないことを意味します。バインディングがコールされると、バインディングのパラメータ値が変更されるか、バインディング自体が変更されないかぎり再実行されません。
バインディングのリフレッシュ方法と、Refresh
属性およびRefreshCondition
属性の設定方法の詳細は、「JSFページ・ライフサイクルとADFページ・ライフサイクルについて」を参照してください。
次の例は、Summit ADFサンプル・アプリケーションの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つのイテレータは自動的に同期されます。詳細は、「実行時に行われる処理: マスター/ディテール表およびフォームのADFイテレータ」を参照してください。
iterator
要素のBinds
属性により、イテレータが反復処理するコレクションが定義されます。RangeSize
属性により、イテレータが一度にページ上に表示するオブジェクトの数が定義されます。RangeSize
の値が-1
の場合、イテレータはコレクション内のすべてのオブジェクトを表示します。
ヒント:
通常、イテレータ・バインディングのデフォルト・レンジ・サイズは25です。ただし、イテレータ・バインディングが「リスト・バインディングの編集」ダイアログから作成される場合、そのレンジ・サイズは-1
にデフォルト設定されるため、最初の25個のみでなく、すべての選択肢がリストに表示されます。
パフォーマンスのヒント:
イテレータがADFビジネス・コンポーネント・レイヤーのビュー・オブジェクトからデータ・オブジェクトをフェッチするために必要なラウンドトリップの回数を減らすには、rangeSize
属性を-1
に設定します。これにより、ユーザーがオブジェクト間を移動するときに、サーバーへ何度もラウンドトリップせず、1回のラウンドトリップでオブジェクトがフェッチされます。
データ・モデルからのデータを表示するため、WebページのUIコンポーネントは、JSF式言語(EL)式を使用してバインディング・オブジェクトにバインドされます。EL式は、バインディング・コンテナ内の特定のバインディング・オブジェクトを参照します。実行時に、JSFランタイムはEL式を評価し、ページ表示の際にコンポーネントにデータを移入するバインディング・オブジェクトから値を取得します。ユーザーがUIコンポーネントでデータを更新する場合、JSFランタイムは同じEL式に基づいて、対応するバインディング・オブジェクトに値を戻します。
ヒント:
マネージドBean内でEL式を使用する必要が生じる場合があります。マネージドBean内でのEL式の使用の詳細は、『Oracle ADF FacesによるWebユーザー・インタフェースの開発』のEL式の作成に関する項を参照してください。
「データ・コントロール」パネルを使用してコンポーネントを作成すると、ADFデータ・バインディング式が自動的に作成されます。この式は、バインディング・オブジェクトのデータを表示するか、バインディング・オブジェクトのプロパティを参照する、すべてのコンポーネント属性に追加されます。事前作成済のそれぞれの式は、ページ定義ファイルで定義された、適切なバインディング・オブジェクトを参照します。これらのバインディング式は編集可能ですが、ADFバインディング式の基本構文に従っていれば、独自に作成することもできます。ADFデータ・バインディング式は、バインディング・オブジェクトからのデータを移入する任意のコンポーネント属性に追加できます。
JSFページの一般的なADFデータ・バインディングEL式は、次の構文を使用して、バインディング・コンテナ内のタイプの異なるバインディング・オブジェクトを参照します。
#{bindings.BindingObject.propertyName}
説明:
bindings
は、式によって参照されているバインディング・オブジェクトが現在のページのバインディング・コンテナにあることを識別する変数です。すべてのADFデータ・バインディングEL式は、bindings
変数で始まる必要があります。
BindingObject
は、ページ定義ファイルで定義される、バインディング・オブジェクトのID、または属性については名前です。バインディングobjectID
または名前は、そのページ定義ファイル内で一意なものです。EL式は、パラメータ・バインディング、実行可能バインディングまたは値バインディングなど、ページ定義ファイル内のどのバインディング・オブジェクトでも参照できます。
propertyName
は、各データバインドUIコンポーネントのデフォルトの表示方法を決定し、実行時のバインディング・オブジェクトのプロパティを設定する変数です。各タイプのバインディング・オブジェクトに対して、異なるバインディング・プロパティがあります。バインディング・プロパティの詳細は、「ADFバインディング・プロパティに関する必知事項」を参照してください。
たとえば、JSFページに表示される次の式を例にしてみます。
#{bindings.ProductName.inputValue}
bindings
変数は、現在のページのバインディング・コンテナでバインドされた値を参照します。参照されているバインディング・オブジェクトはProductName
であり、これは属性バインディング・オブジェクトです。バインディング・プロパティはinputValue
で、最初のProductName
属性の値を戻します。
ヒント:
ページ定義ファイルのバインディング式ではドル記号($
)またはハッシュ記号(#
)の接頭辞を使用できますが、JSFページのEL式で使用できるのは、ハッシュ記号(#
)の接頭辞のみです。
前述のように、「データ・コントロール」パネルを使用してUIコンポーネントを作成する場合、これらの式が組み込まれます。ただし、必要に応じて手動で式を作成することもできます。JDeveloperの式ビルダーは、UIコンポーネントがバインドされるその他の有効なオブジェクトに加え、ページ定義ファイルに定義されたバインディング・オブジェクトのリストを提供することにより、EL式の構築を支援するダイアログです。また、ADFバインディング・オブジェクトの階層リストやADFバインディング・オブジェクトの最も一般的に使用されるプロパティが提供されるため、ADFデータバインド式の作成や編集に特に便利です。バインディング・プロパティの詳細は、「ADFバインディング・プロパティに関する必知事項」を参照してください。
ビジュアル・エディタで項目を選択し、「プロパティ」ウィンドウを使用して特定の属性についてEL式を作成できます。
「プロパティ」ウィンドウから式ビルダーを開くには:
式ビルダーを開いたら、これを使用してEL式を作成できます。
始める前に:
ADFモデル・レイヤーを使用する際に、EL式の作成方法に関する知識があると役立つ場合があります。「ADFデータ・バインディングのEL式の作成」を参照してください。
式ビルダーの使用手順:
表18-3 式ビルダーの「ADFバインディング」ノードの下にあるアイコン
アイコン | 説明 |
---|---|
現在のページのバインディング・コンテナを参照する、 |
|
バインディング・コンテキスト全体を参照する、 |
|
アクション・バインディング・オブジェクトを表します。このアイコンを使用するノードを開くと、有効なアクション・バインディング・プロパティのリストが公開されます。 |
|
イテレータ・バインディング・オブジェクトを表します。このアイコンを使用するノードを開くと、有効なイテレータ・バインディング・プロパティのリストが公開されます。 |
|
属性バインディング・オブジェクトを表します。このアイコンを使用するノードを開くと、有効な属性バインディング・プロパティのリストが公開されます。 |
|
リスト・バインディング・オブジェクトを表します。このアイコンを使用するノードを開くと、有効なリスト・バインディング・プロパティのリストが公開されます。 |
|
表バインディング・オブジェクトまたはツリー・バインディング・オブジェクトを表します。このアイコンを使用するノードを開くと、有効な表バインディング・プロパティおよびツリー・バインディング・プロパティのリストが公開されます。 |
|
ADFバインディング・オブジェクト・プロパティを表します。ADFプロパティの詳細は、「ADFバインディング・プロパティに関する必知事項」を参照してください。 |
|
パラメータ・バインディング・オブジェクトを表します。 |
|
Beanクラスを表します。 |
|
メソッドを表します。 |
式ビルダーを使用してデータバインドされたコンポーネントを作成すると、EL式によって、特定のADFバインディング・プロパティが参照される場合があります。実行時には、これらのバインディング・プロパティによって、データバインドUIコンポーネントのデフォルトの表示方法や、イテレータ・バインディング固有のパラメータなどが定義されます。ADFバインディング・プロパティは、Oracle APIによって定義されます。各バインディング・タイプで使用できるプロパティの完全なリストは、「Oracle ADFバインディング・プロパティ」を参照してください。
特定のプロパティに割り当てられる値は、ページ定義ファイルで定義されます。たとえば、イテレータ・バインディングには、イテレータが一度に表示する行数を指定する、RangeSize
というプロパティがあります。RangeSize
に割り当てられた値は、次の例に示すようにページ定義ファイルで指定されます。
<iterator Binds="ItemsForOrder" RangeSize="25" DataControl="BackOfficeAppModuleDataControl" id="ItemsForOrderIterator" ChangeEventPolicy="ppr"/>
「データ・コントロール」パネルを使用すると、バインドされたコンポーネントを1回のドラッグ・アンド・ドロップ・アクションで設計および作成できますが、基本的なUIコンポーネントを先に作成して後からバインディングを追加した方がよい場合があります。たとえば、ページで宣言的なコンポーネントが使用されている場合、まず宣言的なコンポーネントをドロップしてから正しいADFコントロールにバインドする必要があります。宣言的なコンポーネントは、他のADF Facesコンポーネントで構成された再利用可能な複合UIコンポーネントです。プロジェクトにインポートされた宣言的なコンポーネントは、標準のADF Facesコンポーネントと同様に、「コンポーネント」からページにドロップできます。宣言的なコンポーネント全体ではADFデータ・バインディングは使用できませんが、宣言的なコンポーネントが一旦ページにドロップされると、宣言的なコンポーネントを構成する個々のコンポーネントのADFデータ・バインディングを使用できます。宣言的なコンポーネントの詳細は、『Oracle ADF FacesによるWebユーザー・インタフェースの開発』の宣言コンポーネントの使用に関する項を参照してください。
注意:
最終的にページのUIコンポーネントでADFデータ・バインディングが使用されることがわかっていても、データ・コントロールの準備ができる前にページを開発する必要がある場合、手動でコンポーネントをバインドするのではなく、プレースホルダ・データ・コントロールを使用します。プレースホルダ・データ・コントロールを使用すると、開発済データ・コントロールを使用した場合と同じ宣言的な開発が行われます。詳細は、「プレースホルダ・データ・コントロールによるページの設計」を参照してください。
Webページの設計時に、ADFバインディングは特定のADF Facesタグまたはそれに相当するJSF HTMLタグにしか追加できないことに留意してください。表18-4に、後からADFバインディングを追加できるADF FacesおよびJSFのタグを示します。
ヒント:
JSFの参照実装UIコンポーネント・タグをADFバインディングとともに使用できるようにするには、プロジェクト・プロパティの「ADFビュー設定」で「JSFデータ・バインディングにJSF HTMLウィジェットを含む」オプションを選択する必要があります。しかし、ADF Facesタグを特にADFバインディングとともに使用すると、JSFの参照実装タグを使用するときより優れた機能を発揮します。
表18-4 ADFバインディングに使用できるタグ
ADFバインディングで使用されるADF Facesタグ | 相当するJSF HTMLタグ |
---|---|
テキスト・フィールド |
|
|
|
|
|
|
|
|
該当なし |
表 |
|
|
|
アクション |
|
|
|
|
|
|
該当なし |
選択リスト |
|
|
該当なし |
|
|
|
|
|
|
|
h:selectBooleanCheckbox |
問合せ |
|
|
該当なし |
|
該当なし |
ツリー |
|
|
該当なし |
|
該当なし |
バインディングをUIコンポーネントに追加する前に、次のガイドラインを実行します。
「JSF JSPの作成」ウィザードでJSFページを作成する場合は、「マネージドBean」タブの「マネージドBeanでUIコンポーネントを自動公開しない」オプションを選択します。
このオプションにより、偶発的なプログラム操作に応じてページ内のすべてのUIコンポーネントを対応するバッキングBeanのプロパティに自動的に関連付ける、JDeveloperの自動バインディング機能が無効になります。自動バインディング機能を使用すると、後で、ADFバインディングを追加した後にマネージドBeanのバインディングを削除する必要があります。マネージドBeanのUIコンポーネント・プロパティのバインディングがADFバインディングに影響を及ぼすことはありませんが、JSFコードに存在するとわかりにくくなります。マネージドBeanの詳細は、「Fusion WebアプリケーションでのマネージドBeanの使用」を参照してください。
ADF Facesのタグ・ライブラリを追加します。
ADFバインディングをJSFコンポーネントに追加できますが、ADF Facesコンポーネントの方が、特にADFバインディングと組み合せる場合には優れた機能を発揮します。
「構造」ウィンドウを使用して、ADFモデル・バンディングをコンポーネントに適用します。
始める前に:
UI優先開発に関する知識が役立つ場合があります。詳細は、「単純なUIの最初の開発の使用」を参照してください。
次のタスクを完了する必要があります。
「アプリケーション・モジュールの作成と変更」の説明に従って、データ・モデルで必要なビュー・オブジェクトのインスタンスを含むアプリケーション・モジュールを作成します。または、別のタイプのビジネス・サービスを使用している場合は、『Oracle ADFデータ・コントロールによるアプリケーションの開発』のデータ・コントロールを使用したビジネス・サービスの公開に関する項の説明に従って、そのビジネス・サービスのデータ・コントロールを作成します。
「Webページの作成」の説明に従って、JSFページを作成し、ページに任意のコンポーネントを追加します。
ADFモデル・データ・バインディングを適用するには:
「データ・コントロール」パネルを使用する場合、「「データ・コントロール」パネルの使用時の処理」で説明しているように、必要なADFオブジェクトはすべて自動的に作成されます。