Webページで作成する方法について説明します。この章の内容は次のとおりです。Fusion開発者ガイド』を参照してください。ADFデータ・バインディングの概要ADFモデルによって、ユーザー・インタフェース・テクノロジとビジネス・サービス実装の分離を可能にする2つの概念(データ・コントロールと宣言的バインディング)が実装されています。データ・コントロールでは、標準のメタデータ・インタフェースを使用してビジネス・サービスの実装技術を抽象化し、使用されるプロパティ、メソッドおよびタイプに関する情報など、Beanの操作とデータ・コレクションを表します。JDeveloperを使用すると、ページにドラッグ・アンド・ドロップ可能なアイコンとして情報が表示されます。Swingパネルの場合)を作成できます。JDeveloperによって、ページからサービスへのバインディングを表すメタデータが自動的に作成されます。実行時、ADFモデル・レイヤーは、データ・コントロールとバインディングの両方に対する適切なXMLファイルからメタデータ情報を読み取り、ユーザー・インタフェースとビジネス・サービスとの間の2方向の接続を実装します。宣言的なバインディングによって、データ・コントロール内のデータ・コレクションのデータへのアクセスと、その操作の実行の詳細が抽象化されます。宣言的なバインディング・オブジェクトには、次の3つの基本的な種類があります。データ・コレクションのスクロール処理やページング、または概要情報から詳細情報へのドリルダウンを可能にするユーザー・インタフェースの作成を容易にするイテレータ・バインディングなどがあります。実行可能バインディングには、他のページ内の一連のページの検索やネストを可能にするバインディングも含まれます。データを表示するUIコンポーネントで使用します。値のバインディングは、単純なテキスト・フィールドで使用する最も基本的なものから、リスト、表、ツリーでのUIコントロールのニーズをサポートするような、より高度なリスト、ツリーのバインディングまで、様々な種類があります。ハイパーリンクやボタンなどのUIコマンド・コンポーネントで使用され、コードを記述することなく、データ・コレクションやデータ・コントロールの組込み操作またはカスタム操作を実行します。図2-1は、バインディングによりUIコンポーネントをデータ・コントロールのコレクションとメソッドに関連付ける様子を示しています。バインディングによるデータ・コントロールへのUIコンポーネントの関連付けページのUIコンポーネントをサポートするバインディングのグループは、ページ定義ファイルというページ固有のXMLファイルに記述されます。ADFモデル・レイヤーで実行時にこのファイルが使用され、ページのバインディングがインスタンス化されます。これらのバインディングは、バインディング・コンテナと呼ばれるリクエスト・スコープ・マップに保持されます。JSFアプリケーションでは、バインディング・コンテナは、各ページ・リクエスト時にEL式#{bindings}を使用してアクセスできます。Fusion開発者ガイド』のADFデータ・バインディングEL式の作成に関する項を参照してください。ADFモデル・レイヤーをデータ・バインドに使用するには、サービスに対してデータ・コントロールを作成する必要があります。データ・コントロールは、「データ・コントロール」パネルにアイコンとして表示されます。これを使用してページを宣言的に作成すると、ページのコンポーネントがサービスに自動的にバインドされます。ADFデータ・コントロールを使用したサービスの公開アプリケーションのサービスの準備ができたら、JDeveloperを使用して、UIコンポーネントとサービスとの宣言的バインドに必要な情報を提供するデータ・コントロールを作成できます。EEアプリケーションでは、通常、データベース内の表を表すエンティティBeanを作成し、全EJBに対するセッション・ファサードを作成します。このファサードは、ベースとなるエンティティへの一元化されたインタフェースです。ADFアプリケーションでは、セッションBeanに対するデータ・コントロールを作成できます。データ・コントロールには、セッションBean下のすべてのEJBに関する記述が含まれます。データ・コントロールは、実行時にバインディングが使用するサービスの機能を定義する多数のXMLメタデータ・ファイルで構成されます。Suppliersモジュールでは、多数のリレーショナル・データベース表が含まれるFODデータベース・スキーマが使用されます。モジュールには、Suppliersモジュールで使用されるスキーマ内の表を表す多数のエンティティBeanが含まれます。Beanなどがあります。モジュールには、2つのセッションBeanも含まれます。Beanには、アプリケーション内のすべてのBeanによって使用される汎用サービス・メソッドが含まれます。これらの各セッションBeanに対してデータ・コントロールが存在し、開発者は、Beanに含まれるデータとロジックを使用して宣言的にUIページを作成できます。ADFデータ・コントロールの作成方法データ・コントロールは、JDeveloperのアプリケーション・ナビゲータ内から作成します。3.0エンティティを作成します。詳細は、JDeveloperのオンライン・ヘルプの「永続レイヤーの構築」を参照してください。1つ以上のセッションBeanをエンティティに対して作成します。詳細は、JDeveloperのオンライン・ヘルプの「セッション・ファサード設計パターンでのビジネス・プロセスの実装」を参照してください。エンティティとセッションBeanを作成する際、次の点に注意してください。クラスが有効なデータ・コントロール・ソースであるためには、JavaBeansの仕様に準拠している必要があります。publicデフォルト・コンストラクタを持つ必要があります。データ・コントロールに対応するBeanを表すメタデータ・ファイルは、Beanのクラス名に基づいた名前が付けられるため、同じ名前のBeanがある場合、それらのBeanが異なるパッケージに含まれるようにする必要があります。1つのパッケージに同じ名前のBeanが2つある場合、一方のメタデータ・ファイルによって他方が上書きされます。データ・コントロールの作成に使用されるBeanの名前を変更する場合、データ・コントロールを再作成する必要があります。データ・コントロールを作成する手順:アプリケーション・ナビゲータで、データ・コントロールの作成対象のセッションBeanを右クリックします。ポップアップ・メニューから、「データ・コントロールの作成」を選択します。「EJBインタフェースの選択」ダイアログで、「ローカル」を選択します。データ・コントロール作成時のプロジェクト内の処理EJBセッションBeanに基づいてデータ・コントロールを作成すると、データ・コントロールには、Beanで公開されているすべてのメソッド、ベースになるエンティティBeanとこのBeanで公開されるメソッドとプロパティに関する記述が含まれます。データ・コントロールでサービスおよびバインディングを直接使用するために、JDeveloperで次のメタデータXMLファイルが作成されます。データ・コントロール定義ファイル(DataControls.dcx)。このファイルでは、各データ・コントロールのファクトリ・クラスとIDが定義されます。データ・コントロールの動作を決める設定も含まれます。.dcxファイルを使用して、サービスでトランザクションをサポートするかどうかなどのグローバル・プロパティを設定できます。設定を変更するには、概要エディタでデータ・コントロールを選択し、プロパティ・インスペクタでプロパティの値を変更します。図2-2は、JDeveloperの概要エディタおよびプロパティ・インスペクタでのDataControls.dcxファイルを示しています。概要エディタおよびプロパティ・インスペクタでのDataControls.dcxファイル例2-1は、対応するXMLファイル(ソース・タブをクリックすると、表示される)のコードを示しています。</AdapterDataControl></DataControlConfigs>このサービスによって公開される各エンティティ・オブジェクトと構造化オブジェクトに対する構造定義ファイル。これらのファイルでは、属性、アクセッサおよび操作の表示方法と動作が定義されます。属性のラベルのクライアントでの表示方法を設定できます。構造定義ファイルには、次の情報が含まれます。サービスで使用可能な属性を表します。これらの属性のUIでの表示方法を定義するUIヒントを設定できます。属性値が必須か、一意である必要があるか、表示可能かどうかなどの他のプロパティを設定することもできます。Fusion開発者ガイド』のビュー・オブジェクトの属性コントロール・ヒントの定義に関する項を参照してください。Componentsです。この項を読む際、ビュー・オブジェクトをBeanと読み替えてください。属性の検証を設定したり、カスタム・プロパティを作成することもできます。Fusion開発者ガイド』の組込み宣言的検証ルールの使用に関する項およびカスタム・プロパティによって駆動される汎用機能の実装方法に関する項を参照してください。様々なアクセッサ・メソッドを表します。サービスに対するカスタム・メソッドとパラメータを表します。Beanの構造定義ファイルを示しています。概要エディタでの構造ファイル例2-2は、対応するXMLファイル(ソース・タブをクリックすると、表示される)のコードを示しています。</ResourceBundle></JavaBean>JDeveloperで、データバインドされたUIコンポーネントの作成に使用できるアイコンの「データ・コントロール」パネルへの追加も行われます。「データ・コントロール」パネルには、アプリケーションのビジネス・サービスに対して作成されたすべてのデータ・コントロールがリストされます。UIコンポーネントへのバインドに使用できるコレクション、メソッドおよび組込み操作がすべて公開されます。Fusion開発者ガイド』の「データ・コントロール」パネルの開き方に関する項でパネルを開く手順を確認してください。セッションBeanに対してデータ・コントロールが作成され、ベースになるBeanに対するアクセッサ・メソッドを含むようそのセッションBeanが構成されていた場合、それらのBeanは、アクセッサによって返される、Beanのインスタンス名と一致する名前のコレクションとして表示されます。「データ・コントロール」パネルは、マスター・データ・コレクションの下にネストされたディテール・データ・コレクションを表示することで、データ・モデル内のマスター/ディテール階層を示します。DemoアプリケーションのSuppliersモジュールの「データ・コントロール」パネルを示しています。Beanがすべて、「データ・コントロール」パネルで、アクセッサによって返されるコレクションとして表されていることに注意してください。「データ・コントロール」パネルには、セッションBeanの各サービス・メソッドも、メソッド名と一致する名前のメソッド・アイコンとして表示されます。メソッドが引数をとる場合、その引数は、メソッドのノード内にネストされたパラメータとして「パラメータ」ノードに表示されます。図2-4に示すように、メソッドによって返されるオブジェクトも表示されます。「データ・コントロール」パネル返される各コレクションまたはオブジェクトには、関連付けられているBeanに定義された属性およびカスタム・メソッドが表示されます。Beanに定義されている属性とメソッドを示しています。返されるコレクションの子ノードデフォルトでは、Beanで問合せ可能な各属性に対して暗黙的な表示基準が作成されます。それらは、図2-5に示すように、「名前付き基準」ノードの下に「すべての問合せ可能な属性」ノードとして表示されます。このノードは、第7章「データバインドされた検索フォームの作成」で説明するような、クイック検索フォームの作成に使用されます。図2-5に示すように、返されるコレクションの下の「操作」ノードには、使用可能な組込み操作がすべて表示されます。操作が1つ以上のパラメータをとる場合、そのパラメータは、ネストされた「パラメータ」ノードに表示されます。実行時に、これらのデータ・コレクション操作の1つがデータ・バインディング・レイヤーによって名前別に起動されると、データ・コントロールは、組込み機能を処理するBeanインタフェース上の適切なメソッドにそのコールを委譲します。ほとんどの組込み操作は、現在の行に作用します。execute操作のみが、データ・コントロール自体をリフレッシュします。組込み操作は、次のとおりです。現在の行になる新規行を作成しますが、挿入はしません。現在の行を削除します。アクセッサ・メソッドを実行または再実行することによって、データ・コレクションをリフレッシュします。行セット内の最初の行を現在の行に設定します。行セット内の最後の行を現在の行に設定します。行セット内の次の行を現在の行に設定します。1つ後の行のセットに移動します。行セット内の前の行を現在の行に設定します。1つ前の行のセットに移動します。パラメータとして渡された行キーのシリアライズされた文字列表現を使用して行の検索を試行します。検出されると、その行が削除されます。パラメータとして渡された行キーのシリアライズされた文字列表現を使用して行の検索を試行します。検出されると、その行が現在の行になります。パラメータとして渡された主キーの属性値を使用して行の検索を試行します。検出されると、その行が現在の行になります。注意:デフォルトでは、JavaBeansはrowIndexをキーと見なします。明示的にキーを定義しない場合、索引が使用されます。「データ・コントロール」パネルは、データ・コントロールを作成すると作成されるDataControls.dcxと構造定義ファイルを直接表したものです。ファイルを編集することで、パネルに表示されている要素を変更できます。注意:基礎となるサービスが変更されたら必ず、変更を表示するためにデータ・コントロールを手動でリフレッシュする必要があります。データ・コントロールをリフレッシュするには、「データ・コントロール」パネルのヘッダーにある「リフレッシュ」アイコンをクリックします。EJBデータ・コントロールでのデータのページ分割されたフェッチEJBデータ・コントロールまたはBeanデータ・コントロールを作成するときには、データベースからレコードにどのようにアクセスするか、また同時にメモリーに保持されるレコードの数を制限するかどうかを決定できます。データをフェッチしてメモリーに格納することが考えられるのは、次のような場合です。スクロール可能アクセス・モードデータ・コントロールの作成時にデフォルトを受け入れた場合、データのアクセス・モードはscrollableに設定されます。アプリケーションで表示する必要のあるデータは、必要に応じて(UIコンポーネントのイテレータで指定されたレンジ・サイズと等しい増分で)取得され、メモリーに格納されます。次に、ユーザーがアプリケーションで前方にスクロールすると、必要に応じて追加の行がフェッチされ、メモリーに格納されます。フェッチされた行はすべて、メモリーに残っています。(デフォルト)の場合は、データ・コントロールでは最初の25行がフェッチされます。結果セットの行477から496までを表示するためにユーザーが下にスクロールした場合は、行26から500までがフェッチされるまで、ユーザーがスクロールするにつれて、データは25件ずつフェッチされます。その時点では、合計500行がメモリーに格納されています。oracle.adf.model.adapter.bean.DataFilterHandlerおよびoracle.adf.model.adapter.bean.jpa.JPQLDataFilterHandlerを使用したデータ・コントロールでは、これがデフォルトのモードです。oracle.adf.model.adapter.bean.DataFilterHandlerを使用したデータ・コントロールでは、アクセス・モードを実装するには、データ・コントロールにページング・メソッドを引き続き追加する必要があります。詳細は、2.3.6項「Beanデータ・コントロールでページ分割サポートを手動で実装する方法」を参照してください。範囲ページング・アクセス・モード同時にフェッチされメモリーに格納されるレコードの数を制限するために、rangePagingアクセス・モードを使用できます。スクロール可能モードと同様に、範囲ページング・モードでも、アプリケーションでデータを増分でフェッチできます。範囲ページング・モードでの大きな違いは、メモリーに残されるのは、最後にフェッチされた増分のみであるということです。したがって、たとえば、アクセッサ・イテレータのrangeSize属性が25に設定されていると、いずれの時点でも、メモリーに保持されるレコードは25件までです。前述のスクロール可能な例を範囲ページング版に当てはめると、データ・コントロールでは、行1から20までを表示するために、行1から25までをフェッチしてメモリーに保持します。ユーザーが下にスクロールした場合、データ・コントロールでは、ユーザーがスクロールするのに伴ってデータを25件ずつフェッチし、新しい範囲をフェッチするたびに前の25件のレコードをメモリーから解放します。前述の例で、ユーザーが行477から496までに達した時点でメモリーに残っているのは、行476から500までのみです。複数の増分からのデータを表示する位置までスクロールした時点でメモリーに保持されるのは、最後にフェッチされた増分からのデータのみです。注意:データ・コントロールで範囲ページングを使用した場合、そのデータ・コントロールから作成された、データ・バインダされたUIコンポーネントに対して、組込みナビゲーション操作Lastは機能しません。ページ分割がない場合は、UIコンポーネントに使用できるデータがすべてフェッチされます。oracle.adf.model.adapter.bean.DataFilterHandlerやoracle.adf.model.adapter.bean.jpa.JPQLDataFilterHandlerなどのデータ・コントロール・ハンドラをデータ・コントロールが実装していない場合は、ページ分割が実装されません。具体的なコレクションに対してページングを無効にするには、アノテーションを使用することもできます。詳細は、2.3.4項「データ・コントロールで個別オブジェクトにアクセス・モードを指定する方法」を参照してください。カスタム・ページ分割。組込みページ分割オプションがニーズに合わない場合は、カスタム・ハンドラ・クラスを実装することによって、独自のページ分割を実装できます。詳細は、2.3.7項「問合せおよびページ分割にカスタム・ハンドラを実装する方法」を参照してください。アクセス・モードおよびデータ・コントロール・ハンドラの詳細は、2.3.3項「スクロール可能モードおよび範囲ページング・モードについて」を参照してください。データ・コントロールのページング・モードを変更する方法EJBデータ・コントロールまたはBeanデータ・コントロールのページング・モードを変更する場合は、「データ・コントロール」パネルで変更できます。注意:oracle.adf.model.adapter.bean.DataFilterHandlerとoracle.adf.model.adapter.bean.jpa.JPQLDataFilterHandlerいずれかのハンドラを使用したデータ・コントロールでは、デフォルトのアクセス・モードはscrollableです。始める前に:EJBデータ・コントロールおよびBeanデータ・コントロールのアクセス・モードの一般的な知識があると役立ちます。詳細は、2.3項「EJBデータ・コントロールでのデータのページ分割されたフェッチ」を参照してください。次のタスクを完了する必要があります。EJBデータ・コントロールまたはBeanデータ・コントロールを作成します。詳細は、2.2.1項「ADFデータ・コントロールの作成方法」を参照してください。データ・コントロールのページング・モードを変更する手順は次のとおりです。「データ・コントロール」パネルで、データ・コントロールのノードを右クリックして「定義の編集」を選択します。ejb-definitionの「プロパティ」ダイアログまたはbean-definitionの「プロパティ」ダイアログで、「AccessMode」ドロップダウン・リストからrangePagingまたはscrollableを選択します。範囲ページングを使用するようにデータ・コントロールを変更する場合は、データ・コントロールのFactoryClassプロパティをoracle.adf.model.adapter.bean.BeanDCFactoryImplと指定してください。DataControls.dcxファイルのソース・エディタで、あるいは、ソース・エディタまたは概要エディタでDataControls.dcxを開いたときに表示されるプロパティ・エディタで、FactoryClassプロパティにアクセスできます。範囲ページングを使用するデータ・コントロールにレンジ・サイズを設定する方法データ・コントロールのアクセス・モードをrangePagingに設定すると、データ・コントロールは、データ・コントロール内のコレクションにバインドされる各コンポーネントのアクセッサ・イテレータのrangeSizeプロパティを読み取ることによって、レンジ・サイズを判別します。コンポーネントのレンジ・サイズを設定する手順は次のとおりです。アプリケーション・ナビゲータで、データ・コントロールにバインドされるコンポーネントがあるページを選択します。「構造」ウィンドウで、データ・コントロール・コレクションにバインドされるコンポーネントを選択します。プロパティ・インスペクタで、「動作」ノードを開き、rangeSizeプロパティを目的の値に設定します。Fusion開発者ガイド』のイテレータ・バインディングの作成および使用に関する項を参照してください。スクロール可能モードおよび範囲ページング・モードについてスクロール可能モードおよび範囲ページング・モードをサポートするデータ・コントロールは、その機能を実装するに際して、Beanクラス内のメソッドに依存しています。データ・コントロールが使用するメソッドは、データ・コントロールが使用するデータ・コントロール・ハンドラ・クラスに依存しています。JPAベースのデータ・コントロールでは通常、JPQLDataFilterHandlerハンドラが指定されています。JPQLDataFilterHandlerは、JPA問合せとqueryByRange()メソッドがBean内に存在しているかどうかに応じて異なります。JPA以外のBeanデータ・コントロール(および、queryByRange()メソッドのないJPAベースのデータ・コントロールおよびEJBデータ・コントロール)では、DataFilterHandlerが指定されています。このハンドラを使用するデータ・コントロールに範囲ページングを実装するには、2.3.6項「Beanデータ・コントロールでページ分割サポートを手動で実装する方法」に示されているように、Beanクラスにコードを追加する必要があります。これらのハンドラ・クラスのいずれもサポートしていないデータ・コントロール(以前のバージョンのIDEで生成されたデータ・コントロールなど)の場合は、スクロール可能に対しても範囲ページングに対しても、組込みサポートはありません。様々なサイズの複数のコレクションがデータ・コントロールに含まれる場合は、コレクションのいくつかに別々のアクセス・モードを設定することもできます。これを行うには、Bean内でデータ・コントロールが表すアクセッサ・メソッドにアノテーションを配置します。アノテーションが使用されるメソッドでは、そのアノテーションによって、データ・コントロールに設定されているアクセス・モードがオーバーライドされます。アクセッサ・メソッドにそのようなアノテーションがない場合、そのアクセス・モードは、データ・コントロールに定義されているアクセッサ・メソッドから継承されます。Beanデータ・コントロールまたはEJBデータ・コントロールで個別オブジェクトにアクセス・モードを指定する手順は次のとおりです。データ・コントロールのベースとなるBeanクラスを開きます。データ・コントロールに対して一般的に指定されているアクセス・モードとは異なるアクセス・モードを指定するアクセッサ・メソッドに、アノテーションを追加します。例2-3は、必要なインポート文と使用可能なアノテーション、およびコレクションに対してそれらをどのように使用できるかを示しています。範囲がページ分割されたコレクションに基づいた表のソートについてデフォルトでは、JPAベースのデータ・コントロールにバインドされた表をユーザーがソートした場合、ADFモデル・ランタイムによってイテレータは、すべての行をメモリーに返してソートするように強制されます。これは、バックエンドJPQL問合せがそのソートをデータベース・レベルですでに行っている場合でも同じであり、コレクションが大きすぎるとメモリーに障害が発生する恐れがあります。コレクションに範囲ページングを使用している場合は、ADFモデル・ランタイムによるメモリー内の全ソートを無効にし、そのかわりに、現在選択している範囲に基づいて、ソートをデータ・コントロールに処理させることができます。データ・コントロールを使用して、範囲がページ分割されたコレクションのソートを処理する手順は次のとおりです。アプリケーション・ナビゲータで、DataControls.dcxファイルをダブルクリックし、概要エディタで開きます。概要エディタで、編集するデータ・コントロールのノードを選択します。プロパティ・インスペクタで、ImplementsSortプロパティをtrueに設定します。Beanデータ・コントロールでページ分割サポートを手動で実装する方法JPA以外のデータ・コントロール(または、oracle.adf.model.adapter.bean.jpa.DataFilterHandlerハンドラを使用する任意のBeanデータ・コントロール)では、ADFモデル・ランタイムがスクロール可能ページングおよび範囲ページングを実装するようにするには、セッション・ファサードまたはサービス・ファサードで、各コレクションにメソッドを3つずつ追加する必要があります。メソッド・シグネチャは、次のような形式となります。問合せとページングの組込みオプションがアプリケーションに不十分な場合は、データ・コントロールに独自のデータ・ハンドラ・クラスを指定することによって、問合せとページングのカスタム動作を実装できます。問合せおよびページ分割にカスタム・ハンドラを実装する手順は次のとおりです。データ・コントロールのカスタム・ハンドラ・クラスを記述して、データ・コントロールのプロジェクトに追加します。oracle.adf.model.adapter.bean.jpa.JPQLDataFilterHandlerやoracle.adf.model.adapter.bean.DataFilterHandlerなど、既存のハンドラをサブクラス化できます。カスタム・ハンドラ・クラスの概略については、例2-4を参照してください。DataControls.dcxファイルの「ソース」ビューで、ハンドラの完全修飾クラス名を、各データ・コントロールのDataControlHandler属性の値として入力します。DataControlHandlerは、EJBデータ・コントロールのejb-definition要素の属性であり、Beanデータ・コントロールのbean-definition要素の属性です。「データ・コントロール」パネルから項目をドラッグし、それを特定のUIコンポーネントとしてページ上にドロップすることで、データバインドされたユーザー・インタフェースを設計できます。データ・コントロールを使用してUIコンポーネントを作成すると、選択したデータ・コントロールにそのコンポーネントをバインドするために必要な、様々なコードおよびオブジェクトがJDeveloperによって自動的に作成されます。「データ・コントロール」パネルでは、各オブジェクトは特定のアイコンで表されます。表2-1は、各アイコンが表すもの、「データ・コントロール」パネルの階層内で表示される場所、そのアイコンを使用して作成できるコンポーネントを示しています。作成できるコンポーネントデータ・コントロールデータ・コントロールを表します。データ・コントロール自体を使用してUIコンポーネントを作成することはできませんが、その下に表示される子オブジェクトは、いずれも使用できます。ビジネス・サービスの定義方法によっては、複数のデータ・コントロールが存在することがあります。他のオブジェクトのコンテナとして機能し、作成には使用されません。アクセッサによって返されるコレクションビジネス・サービスでBean形式のアクセッサ・メソッドによって返されるオブジェクトを表します。セッションBeanを作成する際、セッションBean下に各Javaエンティティに対するアクセッサ・メソッドも作成するよう選択した場合、アクセッサによって返されるコレクションがそれらの各エンティティに対して表示されます。エンティティに他のエンティティ(外部キーなど)への関係が含まれている場合、子アクセッサによって返されるコレクションがそのエンティティに対して表示されます。ADFでは、親エンティティと子エンティティ間の関係は、マスター/ディテール関係と呼ばれます。コレクション下の子には、コレクションを構成する要素の属性、コレクション全体に対する操作、コレクション内の各要素の行に対する操作などがあります。フォーム、表、ツリー、レンジ・ナビゲーションの各コンポーネント、およびマスター/ディテール・ウィジェット。フォーム、マスター/ディテール・ウィジェットおよび選択リスト。フォームおよびナビゲーション・コンポーネントの作成の詳細は、第3章「データバインドされた基本的なページの作成」を参照してください。表の作成の詳細は、第4章「ADFによるデータバインドされた表の作成」を参照してください。ツリーおよび他のマスター/ディテールUIコンポーネントの作成の詳細は、第5章「マスター/ディテール・データの表示」を参照してください。リストの作成の詳細は、第6章「データバインドされた選択リストの作成」を参照してください。属性オブジェクト内の個別のデータ要素(行の属性など)を表します。属性は、自分の属するコレクションまたはメソッド戻りの下に、子として表示されます。ラベル、テキスト・フィールドおよび選択リストの各コンポーネント。テキスト・フィールドの作成の詳細は、3.2項「属性を使用したテキスト・フィールドの作成方法」を参照してください。メソッドデータ・コントロールの操作またはその公開された構造のいずれかを表し、パラメータの受入れや、ビジネス・ロジックの実行を行ったり、オプションで単一の値、構造、または単一の値と構造のコレクションを戻すことができます。コマンド・コンポーネント。コマンド・コンポーネントおよびパラメータ付きフォーム。メソッドからのコマンド・コンポーネントの作成の詳細は、3.6項「既存レコードを編集するフォームの作成」を参照してください。パラメータを使用するフォームの作成の詳細は、3.5項「パラメータをとるメソッドを使用するフォームの作成」を参照してください。メソッド戻りカスタム・メソッドによって戻されたオブジェクトを表します。戻されたオブジェクトは、単一の値またはコレクションです。メソッド戻りは、これを戻すメソッドの下に、子として表示されます。メソッド戻りの下に子として表示されるオブジェクトは、コレクションの属性、親コレクションに関連するアクションを実行する他のメソッド、または親コレクションで実行できる操作などです。テキスト・フィールドおよび選択リスト。フォーム、表、ツリー、レンジ・ナビゲーションの各コンポーネント。単一値のメソッド戻りがドロップされた場合、メソッドはフレームワークにより自動的に起動されません。ユーザーは、メソッドを起動するために、実行可能ファイルとして起動アクションも作成するか、対応するメソッドをボタンとしてドロップする必要があります。親オブジェクトに対してアクションを実行する、組込みデータ・コントロール操作を表します。データ・コントロール操作は、コレクションまたはメソッド戻りの下の「操作」ノードにあります。特定のコレクションまたはメソッド戻りの子である操作は、それらのオブジェクトにのみ作用します。1つ以上のパラメータが操作に必要な場合、それらのパラメータは操作の下の「パラメータ」ノードにリストされます。ボタンやリンクなどのコマンド・コンポーネント。操作からのコマンド・コンポーネントの作成の詳細は、3.4項「レンジ・ナビゲーションのフォームへの組入れ」を参照してください。パラメータメソッドまたはその下に表示される操作によって宣言されたパラメータ値を表します。パラメータは、メソッドまたは操作の下の「パラメータ」ノード内に表示されます。ラベル、テキストおよび選択リストの各コンポーネント。「データ・コントロール」パネルの使用方法JDeveloperは、ドロップするデータ・コントロール項目に対してそれぞれ選択できるUIコンポーネントの事前定義済セットを備えています。「データ・コントロール」パネルを使用してUIコンポーネントを作成する手順:「データ・コントロール」パネルで項目を選択し、ページのビジュアル・エディタにその項目をドラッグします。パネルの各項目の定義は、表2-1を参照してください。ポップアップ・メニューから、UIコンポーネントを選択します。「データ・コントロール」パネルから項目をドラッグしてページにドロップすると、ドロップした項目に使用できるすべてのデフォルトUIコンポーネントのポップアップ・メニューが表示されます。図2-6は、アクセッサによって返されるコレクションが「データ・コントロール」パネルからページにドロップされる際に表示されるポップアップ・メニューを示しています。「データ・コントロール」パネルのポップアップ・メニューポップアップ・メニューから選択したコンポーネントに応じて、そのコンポーネントの外観を定義するためのダイアログがJDeveloperで表示されます。図2-7に示すように、結果のUIコンポーネントがJDeveloperのビジュアル・エディタに表示されます。ADF表ヒント:「データ・コントロール」パネルを使用して自動的にバインドされるUIコンポーネントを作成するかわりに、UIをまず作成し、コンポーネントをADFモデル・レイヤーにバインドできます。Fusion開発者ガイド』の最初に単純なUIを開発する方法の使用に関する項を参照してください。「データ・コントロール」パネルを使用してWebアプリケーションを構築すると、JDeveloperによって次の処理が行われます。DataBindings.cpxファイルがプロジェクトのデフォルト・パッケージに作成されます(このファイルが存在しない場合のみ)。そのページ用にエントリが追加されます。DataBindings.cpxファイルは、アプリケーションのバインディング・コンテキスト(使用可能なデータ・コントロールとデータ・バインディング・オブジェクトのリストを保持するコンテナ・オブジェクト)を定義します。各DataBindings.cpxファイルによって、個々のページがページ定義ファイルに含まれるバインディング定義にマップされ、これらのページが使用するデータ・コントロールが登録されます。図2-8は、JDeveloperの概要エディタでのDataBindings.cpxファイルを示しています。概要エディタでのDataBindings.cpxファイル例2-5は、対応するXMLファイルのコードを示しています。Fusion開発者ガイド』のDataBindings.cpxファイルの使用に関する項を参照してください。META-INFディレクトリにadfm.xmlファイルが作成されます。このファイルによってDataBindings.cpxファイルのレジストリが作成され、アプリケーション・メタデータ・レイヤーによって使用されて、アプリケーションのカスタマイズとパーソナライズが行われます。例2-6は、adfm.xmlファイルの例を示しています。path="oracle/fodemo/supplier/DataBindings.cpx"/></MetadataDirectory>Webアプリケーションの場合、web.xmlファイルにADFバインディング・フィルタが登録されます。ADFバインディング・フィルタにより、バインディング・コンテキストへのアクセスが必要なHTTPリクエストが、すべて処理されます。Fusion開発者ガイド』のADFデータ・バインディング・フィルタの構成に関する項を参照してください。プロジェクトに次のライブラリが追加されます。ADFモデル・ランタイムADFモデル汎用ランタイムパッケージ定義ファイルがページ定義サブパッケージに追加されます(ページに対してファイルが存在しない場合)。デフォルトのサブパッケージは、adfmsrcディレクトリにあるview.pageDefsです。ページ定義ファイル(pageNamePageDef.xml)は、アプリケーションのビュー・レイヤーにある各ページのADFバインディング・コンテナを定義します。バインディング・コンテナでは、すべてのADFバインディング・オブジェクトへのランタイム・アクセスが行われます。図2-9は、JDeveloperの概要エディタでのページ定義ファイルを示しています。ページ定義ファイルページで参照されるバインディング・オブジェクトの定義の追加も含めて、ページ定義ファイルが構成されます。例2-7は、ページ定義の対応するXMLファイルを示しています。Fusion開発者ガイド』のページ定義ファイルに関する項を参照してください。事前作成済のコンポーネントがビュー・ページに追加されます。これらの事前作成済のコンポーネントには、ページ定義ファイルのバインディング・オブジェクトを参照するADFデータ・バインディングが含まれます。例2-8は、ADFモデル・データ・バインドを使用してバインドされたコンポーネントを含むJSFページを示しています。例2-7のページ定義ファイルで定義されているとおり、出力テキスト・コンポーネントの値は、productsFindAllバインディング・オブジェクトの値にバインドされていることに注意してください。Facesコンポーネントで必要なすべてのファイルと構成可能な要素が追加されます。Webユーザー・インタフェース開発者ガイド』を参照してください。実行時に行われる処理ページにADFバインディングが含まれている場合、実行時には、クライアントまたはコントローラから起動されたビジネス・サービスとのやり取りが、バインディング・コンテキストを介して、アプリケーションによって管理されます。バインディング・コンテキストは、アプリケーション内のすべてのデータ・コントロールおよびページ定義のランタイム・マップ(名前付きdataでEL式#{data}を使用してアクセス可能)です。ADFライフサイクルで、図2-10に示すように、DataControls.dcx、DataBindings.cpxおよびページ定義ファイルからADFバインディング・コンテキストが作成されます。DataControls.dcxファイルで、設計時にアプリケーションで使用可能なデータ・コントロールが定義され、DataBindings.cpxファイルで、実行時にアプリケーションで使用可能なデータ・コントロールが定義されます。Swingアプリケーションの場合はJavaクラスにマップされます。ページ定義ファイルは、アプリケーション・ページで使用されるバインディング・オブジェクトを定義します。ページごとにページ定義ファイルが1つあります。ADFバインディング・ファイルの実行時の使用バインディング・コンテキストには、これらのオブジェクトの実際のライブ・インスタンスは含まれません。かわりに、マップには必要に応じてデータ・コントロールまたはバインディング・コンテナ・オブジェクトになる参照がまず含まれます。オブジェクト(ページ定義など)がアプリケーションから解放されると(タスク・フローが終了したり、リクエストの終了時にバインディング・コンテナまたはデータ・コントロールが解放される場合)、データ・コントロールおよびバインディング・コンテナは参照オブジェクトに戻ります。Fusion開発者ガイド』の「Fusionページ・ライフサイクルの理解」を参照してください。イテレータの結果のキャッシュについてデータ・コントロールでコレクションを変更する場合、変更されていることがADFモデル・レイヤーで認識されるよう、データ・コントロールでコレクションの新規インスタンスをインスタンス化する必要があります。クライアントのアクションによってコレクションが変更されることがありますが、コレクションの新規インスタンスを作成しないかぎり、その変更はUIに反映されないということです。パフォーマンス上の理由から、アクセッサとメソッド・イテレータでは結果セットがキャッシュされます(デフォルトでは、イテレータのcacheResults属性はtrueに設定されています)。この設定は、ページが初めてレンダリングされるときにイテレータがリフレッシュされ、コレクションの新規インスタンスが作成されることを意味します。部分ページ・レンダリングを使用したページのリフレッシュやページに戻るユーザー・ナビゲーションなどのページの再アクセス時、イテレータはリフレッシュされません。ページで表のソートが可能であるとします。Webユーザー・インタフェース開発者ガイドの部分的なページ・コンテンツのレンダリングに関する項を参照してください)。表のコレクションのインスタンスはすでにインスタンス化され、キャッシュされているため、アクセッサ・イテレータは再実行されません。このため、新しいソート順のコレクションの新規インスタンスは作成されず、ページ上のソート順は同じままになります。この問題に対処するには、結果をキャッシュしないようイテレータを構成するか、ページのリフレッシュ時にイテレータの再実行に使用できるボタンをページに配置します。アクション属性をメソッドにバインドできるボタンがページにない場合、ページのリフレッシュ時に起動されるinvokeAction実行可能ファイルを使用できます。注意:ページでナビゲーション操作を使用してコレクション内を移動する場合、CacheResultsをfalseに設定しないでください。ナビゲーションが機能しなくなります。ボタンを使用してイテレータを再実行する必要があります。ナビゲーション操作の詳細は、第3.4項「レンジ・ナビゲーションのフォームへの組入れ」を参照してください。パフォーマンスに関するヒント:結果セットをキャッシュしないようイテレータを設定し、結果セットが多数の行を返す可能性のあるコレクションの場合、パフォーマンスにマイナスの影響があります。大規模な結果セットの場合、invokeActionを使用する必要があります。結果セットをキャッシュしないようイテレータを設定する手順:ページ定義ファイルを開き、結果をキャッシュしないイテレータを構造ウィンドウで選択します。プロパティ・インスペクタで、「詳細」セクションを展開し、CacheResultsをfalseに設定します。Faces」ページから、「ボタン」をページにドラッグ・アンド・ドロップします。構造ウィンドウで、ボタンを右クリックし、ポップアップ・メニューで「ADFコントロールにバインド」を選択します。「ADFコントロールにバインド」ダイアログで、再実行するイテレータに関連付けられているアクセッサを展開し、アクセッサの「操作」ノードを展開して「実行」を選択します。invokeActionを使用してイテレータを再実行する手順:ページ定義ファイルを開き、構造ウィンドウで「実行可能ファイル」を右クリックし、「実行可能ファイルの中に挿入」→「invokeAction」を選択します。「invokeActionの挿入」ダイアログで、「ID」を一意の名前に設定します。「バインド」ドロップダウン・リストを使用して、再実行するイテレータを選択します。新たに作成したinvokeActionが選択された状態で、プロパティ・インスペクタで「リフレッシュ」を「prepareModel」に設定します。この設定によって、モデルの準備フェーズでアクセッサ・メソッドが起動されます。これによって、バインディング・コンテナがリフレッシュされます。RefreshConditionを、値が実際に変更された場合にのみリフレッシュが行われるようにするEL式に設定します。この条件が設定されている場合、invokeActionが2回コールされます。(!adfFacesContext.postback)}という式では、ページがリフレッシュされる場合にのみ、リフレッシュが行われます。Fusion開発者ガイド』のJSFとADFのページ・ライフサイクルに関する項を参照してください。検証の構成についてページ定義ファイルで、属性バインディングに検証を設定できます。ユーザーが、検証が定義されている属性のフィールド内のデータを編集または入力してフォームを送信すると、構成されているルールおよび条件に対してバインドされたデータが検証されます。検証が失敗すると、アプリケーションによりエラー・メッセージが表示されます。Fusion開発者ガイドのADFモデル・レイヤーの検証の追加に関する項を参照してください。検証を設定する際、表示されるメッセージを定義できます。デフォルトでは、これらのメッセージはクライアントのダイアログに表示されます。これらのメッセージがインラインで表示されるように構成できます。Fusion開発者ガイド』のエラー・メッセージの表示に関する項を参照してください。独自のエラー処理クラスを作成して、メッセージの処理方法を変更することもできます。Fusion開発者ガイド』のエラー処理のカスタマイズに関する項を参照してください。reserved.法律上の。