adf开发
在这篇文章中,我将重点介绍ADF绑定层,并探讨当最初从浏览器请求带有一些数据的ADF页面时它如何工作。
Oracle ADF提供了自己的JSF生命周期扩展版。 实际上,ADF扩展了标准的JSF生命周期实现类,并提供了ADF阶段侦听器,该侦听器会在阶段事件之前和之后得到通知。 这是扩展了相应ADF阶段的JSF生命周期阶段的列表:
- 恢复视图
- ADF初始化上下文
- 应用请求值
- Craft.io验证
- 更新模型值
- ADF验证模型更新
- 调用申请
- ADF元数据提交
- 渲染响应
- ADF准备渲染
请求有两种类型: 初始请求和回发 。 在初始请求期间,生命周期非常短。 在“ 还原视图”阶段之后,生命周期会跳至“ 渲染响应”阶段,跳过其余阶段。
当用户最初从浏览器请求ADF页面时,应用服务器会使用一系列Servlet过滤器对请求进行一些预处理。 其中之一是ADFBindingFilter 。 此筛选器在Web.xml文件中定义,并且需要将ADF绑定应用于操作。 因此,当此过滤器处理请求时,它将在当前会话中查找绑定上下文 ,如果不存在,则将创建一个新实例。 绑定上下文 作为DataBindings.cpx文件的运行时表示形式,包含页面及其页面定义文件之间的映射。 它还包含应用程序中使用的数据控件的列表。 有了所有这些,框架就调查了哪些数据控件和哪些绑定容器将参与请求。 ADFBindingFilter查找或创建每个必需的数据控件的实例,并调用其beginRequest方法。
绑定上下文初始化后,控件将返回到负责处理JSF生命周期阶段的Faces Servlet。 当JSF Lifecycle处理Restore View阶段时,它将使用beforePhase事件通知ADF阶段侦听器 。 ADF阶段侦听器又将事件分派给所有内部阶段侦听器,例如Update Binding Listener 。 然后通过在Binding Context上调用findBindingContainerByPath来初始化所需的绑定容器 。
因此, 绑定上下文, 数据控件和绑定容器已在请求的开始处创建。 该框架使用ADF PageLifeCycle类,以便通过ADF阶段扩展JSF生命周期。 ADF阶段侦听器侦听Restore View阶段的afterPhase事件,并在ADF PageLifeCycle类上调用适当的方法。 这样,标准的JSF restoreView阶段已扩展为两个ADF阶段-InitContext和PrepareModel 。 在PrepareModel阶段, ADF PageLifecycle通过将阶段标识符作为参数传递给Binding Container上的refresh方法。
在准备模型期间, 绑定容器将执行其refresh属性设置为prepareModel的任何可执行条目(迭代器,操作等)。 这篇文章详细介绍了refresh属性。
在考虑对该页面的初始请求时,我们将跳过下一个生命周期阶段,并跳至渲染响应阶段。
ADF阶段侦听器侦听“ 渲染响应”阶段的beforePhase事件,并通过调用一个ADF PageLifeCycle类的对应方法在“ ADF阶段准备渲染”中对其进行扩展。 准备渲染阶段也称为渲染模型 。 在此阶段,框架再次在绑定容器上调用refresh方法,并且此时将其refresh属性设置为renderModel的那些迭代器被执行。
JSF Lifecycle将控件转发到页面渲染器,在这里渲染UI组件时,它们需要来自基础模型的数据。 刷新属性设置为延迟 (默认值)的那些迭代器将在此处执行。
在请求的最后, ADF绑定筛选器在参与请求的每个数据控件上调用endRequest方法。 这导致基础应用程序模块被释放回应用程序模块池。
而已!
翻译自: https://www.javacodegeeks.com/2015/06/understanding-adf-bindings-in-adf-lifecycle.html
adf开发