ADF:在任务流终结器中支持bean作用域
生活随笔
收集整理的這篇文章主要介紹了
ADF:在任务流终结器中支持bean作用域
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
介紹 當(dāng)我們需要在任務(wù)流消失之前完成一些最終工作(干凈的資源,緊密的連接等)時(shí),這是使用任務(wù)流終結(jié)器的非常普遍的推薦做法。 和往常一樣,我們使用在任務(wù)流中聲明的托管bean。 托管Bean可以具有不同的范圍-請(qǐng)求,頁面流,視圖,支持Bean等。該范圍取決于該Bean的實(shí)際用途。 當(dāng)我們?cè)L問終結(jié)器中的backingBean范圍托管的bean時(shí),存在一個(gè)小問題。 讓我們看看下面的示例。 我們有一個(gè)包含頁面片段的有限任務(wù)流: 而且,我們?cè)谌齻€(gè)不同范圍的任務(wù)流中對(duì)bean進(jìn)行了管理-頁面流,視圖和backingBean: <managed-bean id="__3"><managed-bean-name id="__5">FlowBean</managed-bean-name><managed-bean-class id="__4">view.BackBean</managed-bean-class><managed-bean-scope id="__2">pageFlow</managed-bean-scope></managed-bean><managed-bean id="__9"><managed-bean-name id="__6">ViewBean</managed-bean-name><managed-bean-class id="__7">view.BackBean</managed-bean-class><managed-bean-scope id="__8">view</managed-bean-scope></managed-bean><managed-bean id="__10"><managed-bean-name id="__11">BackBean</managed-bean-name><managed-bean-class id="__12">view.BackBean</managed-bean-class><managed-bean-scope id="__13">backingBean</managed-bean-scope></managed-bean> 在頁面上,我們有三個(gè)按鈕綁定到每個(gè)范圍的托管Bean: <af:commandButton text="commandButton 1" id="cb1"action="go" binding="#{backingBeanScope.BackBean.button}"></af:commandButton><af:commandButton text="commandButton 1" id="cb2" binding="#{viewScope.ViewBean.button}"/><af:commandButton text="commandButton 1" id="cb3" binding="#{pageFlowScope.FlowBean.button}"/> Bean類具有button屬性和testString屬性,用于指示是否分配了按鈕: private RichCommandButton button;public void setButton(RichCommandButton button){this.button = button;}public RichCommandButton getButton(){return button;}public String getTestString(){if (this.button == null)return "The button is not assigned";elsereturn "The button is assigned";} 當(dāng)我們按下cb1時(shí),我們進(jìn)入return活動(dòng),并且終結(jié)器被執(zhí)行: public static String resolveExpression(String expression){FacesContext fc = FacesContext.getCurrentInstance();return (String) fc.getApplication().evaluateExpressionGet(fc, expression,String.class);}public void theFinalizer()
{//Just to have test access to the managed beans//and to be sure we work with the same instancesSystem.out.println(resolveExpression("#{pageFlowScope.FlowBean.testString}")+" " + resolveExpression("#{pageFlowScope.FlowBean.button}"));System.out.println(resolveExpression("#{viewScope.ViewBean.testString}")+" " + resolveExpression("#{viewScope.ViewBean.button}"));System.out.println(resolveExpression("#{backingBeanScope.BackBean.testString}")+" " + resolveExpression("#{backingBeanScope.BackBean.button}"));
} 運(yùn)行該應(yīng)用程序,按cb1按鈕,然后在系統(tǒng)日志中查看以下內(nèi)容: 為按鈕分配了RichCommandButton [UIXFacesBeanImpl,id = cb3] 為按鈕分配了RichCommandButton [UIXFacesBeanImpl,id = cb2] 為按鈕分配了RichCommandButton [UIXFacesBeanImpl,id = cb1] 一切似乎都還好。 任務(wù)流程已完成,在終結(jié)器中,我們將使用正確的托管Bean實(shí)例。 在此測(cè)試中,使用Return活動(dòng)正確完成了任務(wù)流。 現(xiàn)在,讓我們放棄我們的任務(wù)流程–只是離開任務(wù)流程所在的頁面。 終結(jié)器也將執(zhí)行,并查看系統(tǒng)輸出: 為按鈕分配了RichCommandButton [UIXFacesBeanImpl,id = cb3] 為按鈕分配了RichCommandButton [UIXFacesBeanImpl,id = cb2] 未分配按鈕 這意味著我們將使用backingBeanScope.BackBean的不同實(shí)例! 萬一任務(wù)流過多,控制器在終結(jié)器中看不到正確的backingBeanScope,它為空,并且控制器創(chuàng)建BackBean的新實(shí)例。 同時(shí)pageFlowScope和viewScope工作完美。 因此,在任務(wù)流中使用backingBean范圍管理的bean時(shí)要特別小心,尤其是在終結(jié)器中訪問它們時(shí)。 但在任何情況下,你可以使用所描述的同樣的伎倆以前的帖子 。 而已! 參考:來自ADF實(shí)踐博客上的JCG合作伙伴 Eugene Fedorenko 在ADF任務(wù)流終結(jié)器中支持bean作用域 。
翻譯自: https://www.javacodegeeks.com/2012/05/adf-backing-bean-scope-in-task-flow.html
總結(jié)
以上是生活随笔為你收集整理的ADF:在任务流终结器中支持bean作用域的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓套件安装(安卓套件)
- 下一篇: Java High CPU故障排除指南–