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コントローラをカスタマイズするには、2つの方法があります。第1の方法は10.1.2の場合と同様で、ファンクション・クラスを拡張してメソッドをオーバーライドする作業で構成されます。この方法は10.1.3でも使用できますが、拡張するベース・クラスはPageController
で、これはStruts、JSFおよびモデル1の各アプリケーションで同じです。
第2の方法はベース・クラスの動作を変更することで、10.1.2で使用していた、あまり一般的ではない方法でした。カスタマイズは、ライフサイクルのフェーズの実行前または後にコードを追加する作業で構成されます。このため、10.1.3では、PageLifecycleのカスタマイズについて、より控えめな方法が導入されました。これがPagePhaseListener
です。
このリリースでは、特定のページのADFページのライフサイクルを次の方法で拡張します。
PageController
クラスを拡張します。
ControllerClass
プロパティで新規のクラスを識別します。
DataActionのコードをPageControllerに変換する手順は、次のとおりです。
次のように、ベース・クラスを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
DataActionContext
がメソッド・パラメータとして出現する箇所をすべてPageLifecycleContext
で置き換えます。
すべてのメソッド修飾子をprotected
からpublic
に置き換えます。
buildEventList
をapplyInputValues
で置き換えます。
refreshModel
をprepareRender
で置き換えます。
handleLifecycle
メソッドが、いずれかのフェーズの前にコードを実行するようにオーバーライドされた場合は、このコードをprepareModel
フェーズのbeforePhase
イベントに移動する必要があります。最後に実行されるコードは、prepareRender
フェーズのafterPhase
イベントに移動してください。
アプリケーションがすでに10.1.3でロードされている場合は、移行プロセスにより、カスタム・データ・アクションでは強制的に10.1.2のページのライフサイクル・コードが使用されます。これは、次のようにして新しいADFページのライフサイクルを使用するように変更する必要があります。
Struts構成ファイル(struts-config.xml
)をソース・エディタで開きます。
現在変換中のクラスの名前(この例では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>
v1ActionClass
のset-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ページのライフサイクルをカスタマイズできます。この方法は、当初のフェーズを変更する必要はないが、そのフェーズの前または後に一部のコードを実行する必要がある場合に適しています。
PagePhaseListenerを使用する手順は、次のとおりです。
次の手順でクラスにPagePhaseListener
インタフェースを実装します。
「ツール」→「インタフェースの実装」を選択します。
PagePhaseListener
と入力し、一致するクラスoracle.adf.controller.v2.lifecycle.PagePhaseListener
を選択します。
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ページのライフサイクルで変更された全メソッドを示します。
パラメータの変更
DataActionContext
がPageLifecycleContext
に変更されました。「PageLifecycleContextの使用」を参照してください。
変更前
protected void findForward (DataActionContext actionContext) throws Exception
10.1.3:
public void findForward (PageLifecycleContext context) throws Exception
パラメータの変更
DataActionContext
がPageLifecycleContext
に変更されました。「PageLifecycleContextの使用」を参照してください。
変更前
protected Method getEventMethod (DataActionContext actionContext, String eventName)
リリース10.1.3
public Method getEventMethod (PageLifecycleContext context, String eventName)
パラメータの変更
DataActionContext
がPageLifecycleContext
に変更されました。「PageLifecycleContextの使用」を参照してください。
変更前
protected void handleError (DataActionContext actionContext, Exception ex)
リリース10.1.3
public void handleError (PageLifecycleContext context, Exception ex)
パラメータの変更
DataActionContext
がPageLifecycleContext
に変更されました。「PageLifecycleContextの使用」を参照してください。
変更前
protected boolean hasErrors(DataActionContext actionContext)
リリース10.1.3
public boolean hasErrors(PageLifecycleContext context)
パラメータの変更
DataActionContext
がPageLifecycleContext
に変更されました。「PageLifecycleContextの使用」を参照してください。
JUCtrlActionBinding
がOperationBinding
に変更されました。「OperationBindingの使用」を参照してください。
変更前
protected void initializeMethodParameters(DataActionContext actionContext, JUCtrlActionBinding actionBinding)
リリース10.1.3
public void initializeMethodParameters(PageLifecycleContext context, OperationBinding actionBinding)
パラメータの変更
DataActionContext
がPageLifecycleContext
に変更されました。「PageLifecycleContextの使用」を参照してください。
例外はスローされません。
変更前
protected void prepareModel(DataActionContext actionContext) throws Exception
リリース10.1.3
public void prepareModel(LifecycleContext context)
パラメータの変更
DataActionContext
がPageLifecycleContext
に変更されました。「PageLifecycleContextの使用」を参照してください。
例外はスローされません。
変更前
protected void processComponentEvents(DataActionContext actionContext) throws Exception
リリース10.1.3
public void processComponentEvents(LifecycleContext context)
パラメータの変更
DataActionContext
がPageLifecycleContext
に変更されました。「PageLifecycleContextの使用」を参照してください。
変更前
protected void processUpdateModel(DataActionContext actionContext)
リリース10.1.3
public void processUpdateModel(LifecycleContext context)
パラメータの変更
DataActionContext
がPageLifecycleContext
に変更されました。「PageLifecycleContextの使用」を参照してください。
変更前
protected void reportErrors(DataActionContext actionContext)
リリース10.1.3
public void reportErrors(PageLifecycleContext context)
パラメータの変更
DataActionContext
がPageLifecycleContext
に変更されました。「PageLifecycleContextの使用」を参照してください。
変更前
protected boolean shouldAllowModelUpdate(DataActionContext actionContext)
リリース10.1.3
public boolean shouldAllowModelUpdate(PageLifecycleContext context)
パラメータの変更
DataActionContext
がPageLifecycleContext
に変更されました。「PageLifecycleContextの使用」を参照してください。
変更前
protected void validateModelUpdates(DataActionContext actionContext)
リリース10.1.3
public void validateModelUpdates(LifecycleContext context)
この項では、10.1.3のADFページのライフサイクルで削除されたため使用できなくなった全メソッドを示します。
削除されたメソッド
protected void buildEventList(DataActionContext actionContext)
applyInputValues
で置き換えられました。
削除されたメソッド
protected void handleLifecycle(DataActionContext actionContext) throws Exception
置換方法
新しいスキームでは、ライフサイクル内のメソッドのセットも実行順序も変更できません。この機能は、LifecycleProcessor
により処理されます。handleLifecycle
メソッドが、いずれかのフェーズの前にコードを実行するようにオーバーライドされている場合は、このコードをprepareModel
フェーズのbeforePhase
イベントに移動する必要があります。最後に実行されるコードは、prepareRender
フェーズのafterPhase
イベントに移動してください。
削除されたメソッド
protected void invokeCustomMethod(DataActionContext actionContext)
置換方法
カスタム・メソッドは、DataActionには存在しません。ページ定義の実行可能バインディング・セクションに存在します。このフェーズ中に実行されていたコードは、ProcessComponentEvents
フェーズに移動する必要があります。
削除されたフェーズ
protected void refreshModel(DataActionContext actionContext)
置換フェーズ
prepareRender
削除されたメソッド
protected void saveErrors(DataActionContext actionContext)
この項では、10.1.3のADFページのライフサイクルに導入された新規メソッドを示します。
新規メソッド
public void applyInputValues(LifecycleContext context)
buildEventList
を置き換えます。
ライフサイクルのコンテキストを初期化するために、ライフサイクルで最初に実行される新規フェーズ。
public void initContext(LifecycleContext context)
ADFページのライフサイクルの新規フェーズ。
public void metadataCommit(LifecycleContext context)
ADFページのライフサイクルの新規フェーズ。
public void prepareRender(LifecycleContext context)
refreshModel
を置き換えます。
ADFページのライフサイクルの新規フェーズ。
public void validateInputValues(LifecycleContext context)
以前はコードを使用できませんでした。
新しいPageLifecycleContextを使用する際の考慮事項は、次のとおりです。
HttpServletRequest
およびHttpServletResponse
には、次のようにEnvironment
クラスを介してアクセス可能です。
HttpServletRequest request = (HttpServletRequest) context.getEnvironment().getRequest()
HttpServletResponse response = (HttpServletResponse) context.getEnvironment().getResponse();
getBindingContainer
はRegionBinding
インタフェースを戻します。BindingContainerから特定のバインディングを取得するには、次のようなコードを使用します。
ControlBinding binding = context.getBindingContainer().getControlBinding("Empno");
次の表に、10.1.2で使用していたコードと10.1.3で使用する必要のあるコードについて、使用方法の比較を示します。
10.1.2での使用方法 | 10.1.3での使用方法 |
---|---|
|
|
getHttpServletRequest()
|
|
getModelReference()
|
不要。DataBindings.cpx 内で参照します。
|
getBindingContainer() はDCBindingContainer を戻します。
|
getBindingContainer() はRegionBinding を戻します。
|
OperationBinding
は、JUCtrlActionBinding
クラスを置換するためにinitializeMethodParameters
などのメソッドで使用される新規インタフェースです。通常、この新規クラスはJUCtrlActionBinding
にキャストできます。
以前のリリースでは、doIt()
メソッドを使用していました。
10.1.3では、invoke()
メソッドを使用します。
Oracle ADFライフサイクルについて
Oracle ADFライフサイクルのフェーズについて
JSFアプリケーションとOracle ADFコントローラについて
StrutsアプリケーションとOracle ADFコントローラについて
モデル1アプリケーションとOracle ADFコントローラについて
Copyright © 1997, 2007, Oracle. All rights reserved.