2

ADF initContext 和 prepareModel 之间的区别,因为两者都通过执行业务服务来准备数据,使其通过绑定容器(即 Map 对象)可用。

4

2 回答 2

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 回答
3

ADF initContext 和 prepareModel,因为两者都是通过执行业务服务来准备数据

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

正如Timo 的回答所示,另一个执行点是PrepareRender. 但建议保留迭代器默认设置,即“延迟”,在这种情况下,只有那些具有 UI 依赖性的迭代器会被刷新和查询。

于 2012-07-27T06:09:38.807 回答