Oracle ADFライフサイクルのカスタマイズ

Oracle ADFで作成するデータ・アクションおよびデータ・ページでは、oracle.adf.controller.lifecycle.Lifecycleインタフェースの実装が使用されます。このインタフェースには、Webページのアクションをモデル・レイヤー内のデータ・バインディングに接続する際に必要なフックが用意されています。Oracle ADFアプリケーションがモデル1フレームワークまたはモデル2フレームワークのいずれに基づく場合でも、このライフサイクル・メソッドをオーバーライドして、Oracle ADFアプリケーションの動作をカスタマイズできます。

注意: 多くの場合、モデル2では名前付きのイベントを作成して、データ・アクションまたはデータ・ページで必要なカスタム動作を実行できます。これにより、ライフサイクル・メソッド自体のサブクラスを作成する必要はなくなります。詳細は、「Oracle ADFでの名前付きイベントの使用」を参照してください。

handleLifecycle()メソッドは、一連の操作を一定の順序でコールし、ライフサイクル内のほとんどの動作を実行します。次の図は、oracle.adf.controller.lifecycle.PageLifecycleクラス内のメソッドで実行されるステップを示しています。図に続く表では、各ステップで処理される内容について説明しています。

Described in text

注意: 次のステップの順序は変更できませんが、ステップ内の動作はカスタマイズできます。

ステップ 説明

1. コンテキストの初期化

handleLifecycleが実行する最初のステップは、コンテキストの初期化です。モデル1アプリケーションでは、コンテキストはoracle.adf.controller.lifecycle.LifecycleContextのインスタンスです。Strutsアプリケーションでは、コンテキストはLifecycleContextのサブクラスであるoracle.adf.controller.struts.actions.DataActionContextのインスタンスです。

いずれの場合も、handleLifecycle()はライフサイクル・コンテキストのinitializeメソッドをコールします。これにより、コンテキスト内の関連するリクエスト、バインディング・コンテナおよびライフサイクルの値が設定されます。

2. イベント・リストの作成

次に、handleLifecycle()は、ライフサイクル・メソッドbuildEventList()を使用してリクエスト・オブジェクトからイベントを取得し、実行するイベントのリストを作成します。

3. モデル・データ・バインディングの準備(存在する場合)

この時点で、handleLifecycle()は、ステップ1で取得したバインディング・コンテナに対してgetAttribute("bindings")をコールして、モデル・データ・バインディングをチェックします。モデル・データ・バインディングが存在する場合、可能性のある更新をリクエストから受信するためのデータ・モデルが、ライフサイクルのこのフェーズで準備されます。このフェーズでは、状態トークンも検証されます。状態トークンの詳細は、「ADF Webページでの検証を使用した作業」を参照してください。

ライフサイクルがモデル・バインディングに関連していない場合があることに注意してください。その場合、ライフサイクルはユーザー・インタフェースでのみ動作するイベントをコールできます。また、データ・バインディングを使用していないカスタム・ナビゲーション・イベントをコールする場合もあります。たとえば、ユーザーに対してWebアプリケーションのHTMLページを表示するための「ヘルプ」ボタンに関連付けられるイベントを作成する場合です。

関連するモデル・バインディングが存在しない場合、handleLifecycle()ステップ7に進みます。

4.モデルの更新が許可されているどうかの確認

モデルの更新が許可されていないイベントもあります。たとえば、イベントがデータ変更のロールバックを実行する場合は、モデルの更新を許可しません。

handleLifecycle()メソッドは、ライフサイクルに対してshouldAllowModelUpdate()をコールして、モデルの更新が許可されているかどうかを確認します。ユーザーが、ユーザー・インタフェースからモデル・データを更新することが許可されている場合、handleLifecycle()は次のステップに進みます。モデルの更新が許可されていない場合、handleLifecycle()ステップ7に進みます。

5. モデルの更新の処理

この時点で、handleLifecycle()はリクエストから新規のデータ値を収集し、その値でモデルを更新します。

6. モデルの更新の検証

この時点で、handleLifecycle()は現在のライフサイクルに関連付けられたバインディング・コンテナに対してvalidateInputValues()をコールして、モデルの更新を検証します。

7. モデル・イベントおよびUIイベントの処理

次に、handleLifecycle()はライフサイクルに対してprocessComponentEvents()をコールします。このメソッドでは、自分で作成して名前を付けた名前付きイベントと、ページにドロップしたデータ・バインディングに関連付けられているイベント(アクション・バインディング)の両方を処理します。
独自の名前付きイベントの作成の詳細は、「Oracle ADFでの名前付きイベントの使用」を参照してください。

8. カスタム・メソッドのコール(Strutsのみ) Strutsアプリケーションの場合のみ、親クラスのサブクラスを作成することなく、アクション、データ・アクションまたはデータ・ページにメソッドをドラッグ・アンド・ドロップできます。handleLifecycle()はライフサイクルに対してinvokeCustomMethod()をコールして、これらのカスタム・メソッドをこの時点で実行します。

詳細は、「データ・アクションを使用したビジネス・サービス・メソッドの実行」を参照してください。

9. バインディング・コントロールのリフレッシュ

このステップでは、現在のライフサイクルに関連付けられているバインディング・コンテナに、アクションまたはページのモデルの更新がすべて完了したことが通知されます。この時点で、handleLifecycle()はバインディング・コンテナに対してrefreshControl()をコールします。

10. ディスパッチしてフォワード

この時点で、handleLifecycle()はライフサイクルに対してfindForward()メソッドをコールします。Strutsアプリケーションの場合、findForward()struts-config.xmlファイル内の<forward>要素の値を検索し、値はアクション・クラスまたはアクション・サブクラスのexecuteメソッドに渡されます。モデル1アプリケーションの場合、このメソッドはコンテキスト内のフォワード・パスを検索して新規のページに直接ディスパッチします。

ライフサイクル・インタフェースとそれを実装するクラスの詳細は、次のJavadocを参照してください。

oracle.adf.controller.lifecycle.Lifecycle
oracle.adf.controller.lifecycle.PageLifecycle
oracle.adf.controller.struts.actions.StrutsPageLifecycle
oracle.adf.controller.struts.actions.StrutsUixLifecycle

また、アプリケーションのテクノロジ・スコープ内にあるクラスのソース・コードは、JDeveloperのメイン・メニューから「ナビゲート」->「Javaクラスに移動」を選択して表示できます。ダイアログのテキスト・フィールドにクラス名を入力し、「OK」をクリックします。


Oracle ADFライフサイクルについて
Oracle ADFでの名前付きイベントの使用
データ・アクションを使用したビジネス・サービス・メソッドの実行

 

Copyright © 1997, 2004, Oracle. All rights reserved.