adf时间作用域_ADF任务流:页面片段的托管bean作用域
adf時間作用域
介紹 當我們使用ADF任務流并需要實現(xiàn)一些特定于流的業(yè)務邏輯或存儲一些與流相關的信息時,我們通常使用pageFlowScope托管bean。 而且,當我們需要為流的活動(頁面或頁面片段)提供服務時,我們會為此類托管bean使用較短的作用域。 通常的做法是將requestScope , backingBeanScope和viewScope范圍用于支持bean的頁面/片段。 在本文中,我將使用這三個選項,并發(fā)現(xiàn)基于片段的任務流在行為上的差異。假設我有一些簡單的任務流模板 task-flow-template.xml:
<managed-bean id="__5"><managed-bean-name id="__3">viewBean</managed-bean-name><managed-bean-class id="__2">com.cs.blog.ViewBean</managed-bean-class><managed-bean-scope id="__4">request</managed-bean-scope></managed-bean><managed-bean id="__15"><managed-bean-name id="__13">flowBean</managed-bean-name><managed-bean-class id="__12">com.cs.blog.FlowBean</managed-bean-class><managed-bean-scope id="__14">pageFlow</managed-bean-scope></managed-bean><view id="MainView"><page>/MainView.jsff</page></view>它具有一個視圖活動MainView和兩個后備bean。 flowBean具有pageFlow范圍,并負責存儲流信息。 viewBean具有請求范圍(我們將使用該范圍),并為ManView視圖活動提供服務。
flowBean具有以下返回任務流標題的方法:
public String getFlowTitle() {return null;}viewBean具有一些字符串字段testString來存儲輸入值:
protected String testString;public void setTestString(String testString) {this.testString = testString;}public String getTestString() {return testString;}MainView顯示任務流的標題,并具有testString的inputText。 看起來像這樣:
我們還在任務流模板上構建了兩個任務流–第一流定義和第二流定義。 他們已覆蓋托管豆。
對于第一流定義 :
<managed-bean id="__5"><managed-bean-name id="__3">viewBean</managed-bean-name><managed-bean-class id="__21">com.cs.blog.FirstViewBean</managed-bean-class><managed-bean-scope id="__4">request</managed-bean-scope></managed-bean> <managed-bean id="__15"><managed-bean-name id="__13">flowBean</managed-bean-name><managed-bean-class id="__12">com.cs.blog.FirstFlowBean</managed-bean-class><managed-bean-scope id="__14">pageFlow</managed-bean-scope></managed-bean>public class FirstFlowBean extends FlowBean {public FirstFlowBean() {super();}public String getFlowTitle() {return "FirstFlow";} }public class FirstViewBean extends ViewBean {public FirstViewBean() {super();}@PostConstructpublic void init() {testString = "FirstFlow"; } }因此,testString的標題和默認值為“ FirstFlow”。
對于第二個流程定義 :
<managed-bean id="__5"><managed-bean-name id="__3">viewBean</managed-bean-name><managed-bean-class id="__21">com.cs.blog.SecondViewBean</managed-bean-class><managed-bean-scope id="__4">request</managed-bean-scope></managed-bean> <managed-bean id="__15"><managed-bean-name id="__13">flowBean</managed-bean-name><managed-bean-class id="__12">com.cs.blog.SecondFlowBean</managed-bean-class><managed-bean-scope id="__14">pageFlow</managed-bean-scope></managed-bean>public class SecondFlowBean extends FlowBean {public SecondfFowBean() {super();}public String getFlowTitle() {return "SecondFlow";} }public class SecondViewBean extends ViewBean {public SecondViewBean() {super();}@PostConstructpublic void init() {testString = "SecondFlow"; }}因此,testString的標題和默認值為“ SecondFlow”。
好。 現(xiàn)在該進行實驗了。 讓我們在頁面上放置兩個具有第一流定義和第二流定義任務流的區(qū)域:
<af:region value="#{bindings.firstflowdefinition1.regionModel}" id="r1"/> <af:separator id="s1"/> <af:region value="#{bindings.secondflowdefinition1.regionModel}" id="r2" />requestScope
將viewBean的范圍保留為requestScope,我們將得到以下結果:
在SecondFlow中,我們從FirstViewBean實例中看到了testString。 每個請求只能有一個requestScope bean實例。 viewBean是為FirstFlow任務流創(chuàng)建的,同一實例再次用于SecondFlow。
backingBeanScope
?
而且,是的,backingBeanScope已解決了該問題。 我們有兩個viewBean實例–用于區(qū)域r1和r2。
但是讓我們讓第一流定義任務流程更加復雜:
現(xiàn)在我們可以從MainView調(diào)用子任務流(具有相同的定義)。 讓我們重復實驗。 關于初始渲染:
到目前為止,一切都很好。 讓我們在FirstFlow的輸入文本中輸入一些內(nèi)容,然后按“調(diào)用子任務流”:
哎呀! 在請求期間,我們只有一個區(qū)域r1的viewBean實例。 因此,在父任務流中再次渲染了在父任務流中輸入的值“ FirstFlow111111”。 viewScope
?
現(xiàn)在,讓我們將viewBean的范圍更改為viewScope并進行相同的實驗。 關于初始渲染:
好。 在inputText中輸入相同的垃圾:
并按“呼叫子任務流程”:
一切都很好。 我們不僅為不同的視口ID(針對不同的區(qū)域和任務流實例)使用了單獨的viewScope bean實例,而且控制器還在導航過程中重置了viewScope。 但是奶酪不是免費的。 您必須按記憶付費。 如果requestScope或backingBeanScope的生存期不超過請求,則viewScope保留在內(nèi)存中,直到更改視口ID。 也許在我的后續(xù)文章中,我將展示如何使用backingBeanScope解決問題。 因此,當您為片段托管bean選擇適當?shù)姆秶鷷r,請考慮將如何使用任務流。 為了獲得非常高的可重用任務流,使用viewScope可能是片段bean的最佳方法。而已!
參考:來自ADF實踐博客的JCG合作伙伴 Eugene Fedorenko的ADF Task Flow中頁面片段的托管bean作用域 。
翻譯自: https://www.javacodegeeks.com/2012/05/adf-task-flow-managed-bean-scopes-for.html
adf時間作用域
總結
以上是生活随笔為你收集整理的adf时间作用域_ADF任务流:页面片段的托管bean作用域的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 几年才有一次2月29日 2月29日什么时
- 下一篇: maven 父maven_Maven不会