ADF initContext 和 prepareModel 之间的区别,因为两者都通过执行业务服务来准备数据,使其通过绑定容器(即 Map 对象)可用。
问问题
4579 次
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 回答