2012-07-26 79 views

回答

3

ADF和调用initContext prepareModel,因为两者均是通过执行楼内设有商务服务

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

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

+0

这是否意味着在prepareRender阶段还会执行buisness服务,即组件被更新为其partialTrigger设置在其他组件上的组件。 – user530158 2012-07-31 06:23:55

+0

实际上阶段是准备渲染:http://docs.oracle.com/cd/E15051_01/web.1111/b31974/adf_lifecycle.htm它是在准备渲染之前调用的。在ADF中,您有两个常用的刷新钩子:准备模型并准备渲染。默认设置是“延迟”。这里的刷新是针对从UI组件引用的那些绑定的呈现响应。刷新可能不会重新执行数据库中的查询,但最初会刷新ADF中保存的迭代器。如果数据需要通过查询,那么这是当它发生 – 2012-08-03 05:32:56

+0

谢谢弗兰克,评论真正有助于理解ADF的生命周期。 – user530158 2012-11-27 05:41:26

3

ADF模型生命周期阶段:

  • 调用initContext树立生命周期,工作出了什么PageDefs加载。
  • prepareModel创建绑定对象并将其添加到HTTP请求中。此时也评估参数。
  • applyInputValues处理从页面发布的值,并建立一个内部绑定列表来更新,并根据需要执行方法。
  • validateInputValues将客户端验证程序应用于applyInputValues阶段提供的更新列表。这些验证器被定义为输入组件内嵌套的f:validator和af:convertNumber组件。
  • processUpdateModel将已验证的更改发送到绑定对象到模型图层。
  • validateModelUpdates管理来自Model层的验证错误。
  • 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");