了解ADF生命周期中的ADF绑定
在本文中,我將重點(diǎn)介紹ADF綁定層,并探討當(dāng)最初從瀏覽器請求帶有某些數(shù)據(jù)的ADF頁面時,它如何工作。
Oracle ADF提供了自己的JSF生命周期擴(kuò)展版。 實際上,ADF擴(kuò)展了標(biāo)準(zhǔn)JSF生命周期實現(xiàn)類,并提供了ADF階段偵聽器,該偵聽器會在階段事件之前和之后得到通知。 這是擴(kuò)展了相應(yīng)ADF階段的JSF生命周期階段的列表:
- 恢復(fù)視圖
- ADF初始化上下文
- 應(yīng)用請求值
- Craft.io驗證
- 更新模型值
- ADF驗證模型更新
- 調(diào)用申請
- ADF元數(shù)據(jù)提交
- 渲染響應(yīng)
- ADF準(zhǔn)備渲染
請求有兩種類型: 初始請求和回發(fā) 。 在初始請求期間,生命周期非常短。 在“ 還原視圖”階段之后,生命周期會跳至“ 渲染響應(yīng)”階段,跳過其余階段。
當(dāng)用戶最初從瀏覽器請求ADF頁面時,應(yīng)用服務(wù)器會使用一系列Servlet過濾器對請求進(jìn)行一些預(yù)處理。 其中之一是ADFBindingFilter 。 此篩選器在Web.xml文件中定義,并且需要將ADF綁定應(yīng)用于操作。 因此,當(dāng)此過濾器處理請求時,它將在當(dāng)前會話中查找綁定上下文 ,如果不存在,則將創(chuàng)建一個新實例。 綁定上下文 作為DataBindings.cpx文件的運(yùn)行時表示形式,包含頁面及其頁面定義文件之間的映射。 它還包含應(yīng)用程序中使用的數(shù)據(jù)控件的列表。 有了所有這些,框架就調(diào)查了哪些數(shù)據(jù)控件和哪些綁定容器將參與請求。 ADFBindingFilter查找或創(chuàng)建每個必需的數(shù)據(jù)控件的實例,并調(diào)用其beginRequest方法。
綁定上下文初始化后,控件將返回到負(fù)責(zé)處理JSF生命周期階段的Faces Servlet。 當(dāng)JSF Lifecycle處理Restore View階段時,它將使用beforePhase事件通知ADF階段偵聽器 。 ADF階段偵聽器又將事件分派給所有內(nèi)部階段偵聽器,例如Update Binding Listener 。 然后通過在Binding Context上調(diào)用findBindingContainerByPath來初始化所需的綁定容器 。
因此, 綁定上下文, 數(shù)據(jù)控件和綁定容器已在請求的開始處創(chuàng)建。 該框架使用ADF PageLifeCycle類,以通過ADF階段擴(kuò)展JSF生命周期。 ADF階段偵聽器偵聽Restore View階段的afterPhase事件,并在ADF PageLifeCycle類上調(diào)用適當(dāng)?shù)姆椒ā?這樣,標(biāo)準(zhǔn)的JSF restoreView階段已擴(kuò)展為兩個ADF階段-InitContext和PrepareModel 。 在PrepareModel階段, ADF PageLifecycle在綁定容器上調(diào)用刷新方法,并將階段標(biāo)識符作為參數(shù)傳遞。
在準(zhǔn)備模型期間, 綁定容器將執(zhí)行其refresh屬性設(shè)置為prepareModel的任何可執(zhí)行條目(迭代器,操作等)。 這篇文章詳細(xì)介紹了refresh屬性。
在考慮對該頁面的初始請求時,我們將跳過下一個生命周期階段,并跳至渲染響應(yīng)階段。
ADF階段偵聽器偵聽“ 渲染響應(yīng)”階段的beforePhase事件,并通過調(diào)用一個ADF PageLifeCycle類的對應(yīng)方法在“ ADF階段準(zhǔn)備渲染”中對其進(jìn)行擴(kuò)展。 準(zhǔn)備渲染階段也稱為渲染模型 。 在此階段,框架再次在綁定容器上調(diào)用refresh方法,并且此時將其refresh屬性設(shè)置為renderModel的那些迭代器被執(zhí)行。
JSF Lifecycle將控件轉(zhuǎn)發(fā)到頁面渲染器,在這里渲染UI組件時,它們需要來自基礎(chǔ)模型的數(shù)據(jù)。 刷新屬性設(shè)置為延遲 (默認(rèn)值)的那些迭代器將在此處執(zhí)行。
在請求的最后, ADF綁定篩選器在參與請求的每個數(shù)據(jù)控件上調(diào)用endRequest方法。 這導(dǎo)致基礎(chǔ)應(yīng)用程序模塊被釋放回應(yīng)用程序模塊池。
而已!
翻譯自: https://www.javacodegeeks.com/2015/06/understanding-adf-bindings-in-adf-lifecycle.html
總結(jié)
以上是生活随笔為你收集整理的了解ADF生命周期中的ADF绑定的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win10命令重置安全和组策略(Win1
- 下一篇: 使用Hibernate JPA的自定义布