2

ADF initContext と prepareModel の違いは、どちらもビジネス サービスを実行してデータを準備し、Map オブジェクトであるバインディング コンテナーを介してデータを使用できるようにするためです。

4

2 に答える 2

3

ADFのinitContextとprepareModelはどちらもビジネスサービスを実行してデータを準備するため

これは完全に正しくありません。はinitContextBindingContext を設定します。これにより、コンテンツDataBindings.cpxが初期化され、ページのバインディング コンテナーが準備されます。はprepareModel、データ クエリの実行ポイントです。

ティモの答えが示すように、他の実行ポイントはPrepareRender. ただし、推奨されるのは、イテレーターのデフォルト設定を維持することです。これは「据え置き」です。この場合、UI 依存関係を持つイテレーターのみが更新され、照会されます。

于 2012-07-27T06:09:38.807 に答える
3

ADF モデルのライフ サイクル フェーズは次のとおりです。

  • initContextはライフ サイクルを設定し、どの PageDefs をロードするかを決定します。
  • prepareModelはバインディング オブジェクトを作成し、それを HTTP 要求に追加します。パラメータもこの時点で評価されます。
  • applyInputValuesは、ページからポストされた値を処理し、必要に応じて更新するバインディングと実行するメソッドの内部リストを作成します。
  • validateInputValuesは、applyInputValues フェーズによって提示された更新のリストにクライアント側バリデーターを適用します。これらのバリデータは、入力コンポーネント内のネストされた f:validator および af:convertNumber コンポーネントとして定義されます。
  • processUpdateModelは、バインドされたオブジェクトへの検証済みの変更をモデル レイヤーに送信します。
  • validateModelUpdatesは、モデル層からの検証エラーを管理します。
  • processComponentEventsは、applyInputValues フェーズからキューに入れられたすべてのリスナーとアクション イベントを処理します。
  • metadataCommitは、フレームワークのランタイム カスタマイズ機能の一部を管理します。ユーザーが画面上のコンポーネントを移動したり、WebCenter を介してタスク フローを追加したりするなど、何らかの方法でページをカスタマイズした場合、画面に対するそれらのパーソナライズはメタデータ リポジトリに保存されます。 (MDS) この時点で。
  • prepareRenderは、ページが表示される前に実行する最後のフェーズです。

一部の状況 (モーダル ダイアログなど) では、ページがレンダリングされた後に次のコードが起動するとは限らないことに注意してください。

  public void afterPhase(PagePhaseEvent pagePhaseEvent) {
    if (pagePhaseEvent.getPhaseId() == Lifecycle.PREPARE_RENDER_ID) {
      injectRedirect();
    }
  }

これにより、サーバー コードは、ドキュメントがレンダリングされた直後に af:document を調べることができなくなります。たとえば、利用可能なドキュメントがないため、次の例は失敗します。

  return context.getViewRoot().getChildren().get(0).getClientId().equals("doc0");
于 2012-07-26T11:53:36.327 に答える