ADF生命周期阶段的差异

时间:2012-07-26 09:48:38

标签: oracle-adf

ADF initContext和prepareModel之间的区别,因为它们都是通过执行buisness服务来准备数据,使其通过作为Map对象的绑定容器可用。

2 个答案:

答案 0 :(得分:3)

ADF模型生命周期阶段:

  • initContext 设置生命周期,确定要加载的PageDef。
  • 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");

答案 1 :(得分:3)

  

ADF initContext和prepareModel,因为它们都通过执行商务服务来准备数据

这不太正确。 initContext设置BindingContext,确保初始化DataBindings.cpx的内容,并准备页面的绑定容器。 prepareModel是数据查询的执行点。

Timo's answer显示的另一个执行点是PrepareRender。但建议保留迭代器默认设置,这是“延迟”,在这种情况下,只有那些具有UI依赖性的刷新和查询迭代器。