10.1.2からADFページのライフサイクルへの変換

10.1.2のStruts ADFアプリケーションを10.1.3で使用すると、ADFページ・コントローラによりアプリケーションで10.1.2の実装を使用していることが検出され、10.1.2のプロセスで使用されていたのと同じプロセスを使用して処理されます。特に、JDeveloperでは、10.1.2で使用されていたカスタム・コードを持つDataActionsが識別され、10.1.2のライフサイクルを使用して実行されます。したがって、10.1.2のスキームを使用するアプリケーションを引き続き使用できます。

ただし、新しいADFライフサイクルを利用するには、アプリケーションを変更する必要があります。10.1.3のライフサイクルでは、APIとADFページのライフサイクルの動作が一部変更されているため、10.1.2で記述されたカスタム・ライフサイクル・コードは、10.1.3のライフサイクルを使用するように変更する必要があります。

このトピックの次の各項で、10.1.3のADFライフサイクルを使用するようにカスタム・コードをアップグレードする方法を説明し、変更されたメソッド、削除されたメソッドおよび新規メソッドの詳細を示します。

ADFページ・コントローラのカスタマイズ方法の概要

ADFコントローラをカスタマイズするには、2つの方法があります。第1の方法は10.1.2の場合と同様で、ファンクション・クラスを拡張してメソッドをオーバーライドする作業で構成されます。この方法は10.1.3でも使用できますが、拡張するベース・クラスはPageControllerで、これはStruts、JSFおよびモデル1の各アプリケーションで同じです。

第2の方法はベース・クラスの動作を変更することで、10.1.2で使用していた、あまり一般的ではない方法でした。カスタマイズは、ライフサイクルのフェーズの実行前または後にコードを追加する作業で構成されます。このため、10.1.3では、PageLifecycleのカスタマイズについて、より控えめな方法が導入されました。これがPagePhaseListenerです。

ページ・コントローラの拡張

このリリースでは、特定のページのADFページのライフサイクルを次の方法で拡張します。

  1. PageControllerクラスを拡張します。

  2. ページのページ定義のControllerClassプロパティで新規のクラスを識別します。

DataActionのコードをPageControllerに変換する手順は、次のとおりです。

  1. 次のように、ベース・クラスをDataActionまたはDataForwardActionからPageControllerに置き換えます。

    新規のimportを追加します。

    import oracle.adf.controller.v2.context.LifecycleContext;
    import oracle.adf.controller.v2.context.PageLifecycleContext;
    import oracle.adf.controller.v2.lifecycle.PageController;        

    古いimportを削除します。

    import oracle.adf.controller.struts.actions.DataForwardAction;
    import oracle.adf.controller.struts.actions.DataActionContext;        

    クラスの拡張をPageControllerで置き換えます。

    public class DataPageAction extends PageController        
  2. メソッド・パラメータを次のように変更します。

    DataActionContextがメソッド・パラメータとして出現する箇所をすべてPageLifecycleContextで置き換えます。

  3. メソッド修飾子を次のように変更します。

    すべてのメソッド修飾子をprotectedからpublicに置き換えます。

  4. まだ不正な他のメソッドは、Javaソース・エディタに波形の下線付きで表示されます。次の方法で個別に訂正してください。

    buildEventListapplyInputValuesで置き換えます。

    refreshModelprepareRenderで置き換えます。

    handleLifecycleメソッドが、いずれかのフェーズの前にコードを実行するようにオーバーライドされた場合は、このコードをprepareModelフェーズのbeforePhaseイベントに移動する必要があります。最後に実行されるコードは、prepareRenderフェーズのafterPhaseイベントに移動してください。

アプリケーションがすでに10.1.3でロードされている場合は、移行プロセスにより、カスタム・データ・アクションでは強制的に10.1.2のページのライフサイクル・コードが使用されます。これは、次のようにして新しいADFページのライフサイクルを使用するように変更する必要があります。

  1. Struts構成ファイル(struts-config.xml)をソース・エディタで開きます。

  2. 現在変換中のクラスの名前(この例ではmyCustomDataAction)を検索します。移行後のアクションは次のようになります。

    <action path="/myAction"
      className="oracle.adf.controller.v2.struts.actions.DataActionMapping"
      type="oracle.adf.controller.v2.struts.actions.DataForwardAction"
      name="DataForm">
      <set-property property="v1ActionClass" value="view.myCustomDataAction"/>
    </action>        
  3. v1ActionClassset-property行を削除します。コードは次のようになります。

    <action path="/myAction"
      className="oracle.adf.controller.v2.struts.actions.DataActionMapping"
      type="oracle.adf.controller.v2.struts.actions.DataForwardAction"        
      name="DataForm">
    </action>        

ADFページのライフサイクル・フェーズのイベントのリスニング

ADFページのライフサイクルにフェーズ・リスナーを実装して、ADFページのライフサイクルをカスタマイズできます。この方法は、当初のフェーズを変更する必要はないが、そのフェーズの前または後に一部のコードを実行する必要がある場合に適しています。

PagePhaseListenerを使用する手順は、次のとおりです。

  1. 次の手順でクラスにPagePhaseListenerインタフェースを実装します。

    「ツール」「インタフェースの実装」を選択します。

    PagePhaseListenerと入力し、一致するクラス
    oracle.adf.controller.v2.lifecycle.PagePhaseListenerを選択します。

  2. afterPhaseまたはbeforePhaseイベントを処理するコードを記述します。

    次に、PrepareRenderフェーズのbeforePhaseイベントを取得する例を示します。

    public void beforePhase(PagePhaseEvent event)
    {
      if (event.getPhaseId() == Lifecycle.PREPARE_RENDER_ID)
      {
        System.out.println("---> Before PREPARE_RENDER");
      }
    }        

変更されたメソッド

この項では、10.1.3のADFページのライフサイクルで変更された全メソッドを示します。

findForward

パラメータの変更

変更前

protected void findForward (DataActionContext actionContext) throws Exception    

10.1.3:

public void findForward (PageLifecycleContext context) throws Exception    

getEventMethod

パラメータの変更

変更前

protected Method getEventMethod (DataActionContext actionContext, String eventName)    

リリース10.1.3

public Method getEventMethod (PageLifecycleContext context, String eventName)    

handleError

パラメータの変更

変更前

protected void handleError (DataActionContext actionContext, Exception ex)    

リリース10.1.3

public void handleError (PageLifecycleContext context, Exception ex)    

hasErrors

パラメータの変更

変更前

protected boolean hasErrors(DataActionContext actionContext)    

リリース10.1.3

public boolean hasErrors(PageLifecycleContext context)    

initializeMethodParameters

パラメータの変更

変更前

protected void initializeMethodParameters(DataActionContext actionContext, JUCtrlActionBinding actionBinding)    

リリース10.1.3

public void initializeMethodParameters(PageLifecycleContext context, OperationBinding actionBinding)    

prepareModel(ライフサイクル・フェーズ)

パラメータの変更

変更前

protected void prepareModel(DataActionContext actionContext) throws Exception    

リリース10.1.3

public void prepareModel(LifecycleContext context)    

processComponentEvents(ライフサイクル・フェーズ)

パラメータの変更

変更前

protected void processComponentEvents(DataActionContext actionContext) throws Exception    

リリース10.1.3

public void processComponentEvents(LifecycleContext context)    

processUpdateModel(ライフサイクル・フェーズ)

パラメータの変更

変更前

protected void processUpdateModel(DataActionContext actionContext)    

リリース10.1.3

public void processUpdateModel(LifecycleContext context)    

reportErrors

パラメータの変更

変更前

protected void reportErrors(DataActionContext actionContext)    

リリース10.1.3

public void reportErrors(PageLifecycleContext context)    

shouldAllowModelUpdate

パラメータの変更

変更前

protected boolean shouldAllowModelUpdate(DataActionContext actionContext)    

リリース10.1.3

public boolean shouldAllowModelUpdate(PageLifecycleContext context)    

validateModelUpdates(ライフサイクル・フェーズ)

パラメータの変更

変更前

protected void validateModelUpdates(DataActionContext actionContext)    

リリース10.1.3

public void validateModelUpdates(LifecycleContext context)    

削除されたメソッド

この項では、10.1.3のADFページのライフサイクルで削除されたため使用できなくなった全メソッドを示します。

buildEventList

削除されたメソッド

protected void buildEventList(DataActionContext actionContext)    

applyInputValuesで置き換えられました。

handleLifecycle

削除されたメソッド

protected void handleLifecycle(DataActionContext actionContext) throws Exception    

置換方法

新しいスキームでは、ライフサイクル内のメソッドのセットも実行順序も変更できません。この機能は、LifecycleProcessorにより処理されます。handleLifecycleメソッドが、いずれかのフェーズの前にコードを実行するようにオーバーライドされている場合は、このコードをprepareModelフェーズのbeforePhaseイベントに移動する必要があります。最後に実行されるコードは、prepareRenderフェーズのafterPhaseイベントに移動してください。

invokeCustomMethod

削除されたメソッド

protected void invokeCustomMethod(DataActionContext actionContext)    

置換方法

カスタム・メソッドは、DataActionには存在しません。ページ定義の実行可能バインディング・セクションに存在します。このフェーズ中に実行されていたコードは、ProcessComponentEventsフェーズに移動する必要があります。

refreshModel(ライフサイクル・フェーズ)

削除されたフェーズ

protected void refreshModel(DataActionContext actionContext)    

置換フェーズ

prepareRender

saveErrors

削除されたメソッド

protected void saveErrors(DataActionContext actionContext)    

新規メソッド

この項では、10.1.3のADFページのライフサイクルに導入された新規メソッドを示します。

applyInputValues

新規メソッド

public void applyInputValues(LifecycleContext context)    

buildEventListを置き換えます。

initContext(ライフサイクル・フェーズ)

ライフサイクルのコンテキストを初期化するために、ライフサイクルで最初に実行される新規フェーズ。

public void initContext(LifecycleContext context)    

metadataCommit(ライフサイクル・フェーズ)

ADFページのライフサイクルの新規フェーズ。

public void metadataCommit(LifecycleContext context)    

prepareRender(ライフサイクル・フェーズ)

ADFページのライフサイクルの新規フェーズ。

public void prepareRender(LifecycleContext context)    

refreshModelを置き換えます。

validateInputValues(ライフサイクル・フェーズ)

ADFページのライフサイクルの新規フェーズ。

public void validateInputValues(LifecycleContext context)    

以前はコードを使用できませんでした。

PageLifecycleContextの使用

新しいPageLifecycleContextを使用する際の考慮事項は、次のとおりです。

次の表に、10.1.2で使用していたコードと10.1.3で使用する必要のあるコードについて、使用方法の比較を示します。

10.1.2での使用方法 10.1.3での使用方法

getLifecycle()Lifecycleを戻します。

getPageLifecycle()PageLifecycleを戻します。

getHttpServletRequest()
(HttpServletRequest) getEnvironment().getRequest()          
getModelReference() 不要。DataBindings.cpx内で参照します。
getBindingContainer()DCBindingContainerを戻します。 getBindingContainer()RegionBindingを戻します。

OperationBindingの使用

OperationBindingは、JUCtrlActionBindingクラスを置換するためにinitializeMethodParametersなどのメソッドで使用される新規インタフェースです。通常、この新規クラスはJUCtrlActionBindingにキャストできます。

以前のリリースでは、doIt()メソッドを使用していました。

10.1.3では、invoke()メソッドを使用します。


Oracle ADFライフサイクルについて
Oracle ADFライフサイクルのフェーズについて
JSFアプリケーションとOracle ADFコントローラについて
StrutsアプリケーションとOracle ADFコントローラについて
モデル1アプリケーションとOracle ADFコントローラについて