日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ADF任务流:页面片段的托管bean范围

發布時間:2023/12/3 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ADF任务流:页面片段的托管bean范围 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
介紹 當我們使用ADF任務流并需要實現一些特定于流的業務邏輯或存儲一些與該流相關的信息時,我們通常使用pageFlowScope托管bean。 而且,當我們需要為流的活動(頁面或頁面片段)提供服務時,我們將較短的作用域用于此類托管bean。 通常的做法是將requestScopebackingBeanScopeviewScope范圍用于支持bean的頁面/片段。 在本文中,我將使用這三個選項,并發現基于片段的任務流在行為上的差異。

假設我有一些簡單的任務流模板 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”。

好。 現在該進行實驗了。 讓我們在頁面上放置兩個具有第一流定義和第二流定義任務流的區域:

<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任務流創建的,同一實例再次用于SecondFlow。

backingBeanScope
?

有人可能建議對viewBean使用backingBeanScope而不是requestScope。 backingBeanScope通常用于管理區域和聲明性組件。 它的壽命與requestScope相同,但是對于區域/聲明性組件的不同實例,您將擁有backingBean作用域的受管bean的單獨實例。 在我們的例子中,我們有兩個不同的區域,所以讓我們嘗試:

而且,是的,backingBeanScope已解決了該問題。 我們有兩個viewBean實例–用于區域r1和r2。

但是,讓我們讓“第一流定義”任務流程更加復雜:

現在我們可以從MainView調用子任務流(具有相同的定義)。 讓我們重復一下實驗。 關于初始渲染:

到目前為止,一切都很好。 讓我們在FirstFlow的輸入文本中輸入一些內容,然后按“調用子任務流”:

哎呀! 在請求期間,我們只有一個r1區域的viewBean實例。 因此,在父任務流中再次呈現了在父任務流中輸入的值“ FirstFlow111111”。

viewScope
?
現在,我們將viewBean的范圍更改為viewScope并進行相同的實驗。 關于初始渲染:

好。 在inputText中輸入相同的垃圾:

然后按“呼叫子任務流程”:

一切都很好。 我們不僅為不同的視口ID(針對不同的區域和任務流實例)使用了單獨的viewScope bean實例,而且控制器還在導航過程中重置了viewScope。 但是奶酪不是免費的。 您必須按記憶付費。 如果requestScope或backingBeanScope的生存期不超過請求,則viewScope保留在內存中,直到更改視口ID。 也許在我的后續文章中,我將展示如何使用backingBeanScope解決問題。 因此,當您為片段托管bean選擇適當的范圍時,請考慮將如何使用任務流。 為了獲得非常高的可重用任務流,使用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任务流:页面片段的托管bean范围的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。