关于文明网站建设存在的问题,wordpress站内搜索慢,跨境电商怎么做平台,淮北矿业 集团 工程建设有限责任公司网站介绍 当我们使用ADF任务流并需要实现一些特定于流的业务逻辑或存储一些与该流相关的信息时#xff0c;我们通常使用pageFlowScope托管bean。 而且#xff0c;当我们需要为流的活动#xff08;页面或页面片段#xff09;提供服务时#xff0c;我们将较短的作用域用于此类托… 介绍 当我们使用ADF任务流并需要实现一些特定于流的业务逻辑或存储一些与该流相关的信息时我们通常使用pageFlowScope托管bean。 而且当我们需要为流的活动页面或页面片段提供服务时我们将较短的作用域用于此类托管bean。 通常的做法是将requestScope backingBeanScope和viewScope范围用于支持bean的页面/片段。 在本文中我将使用这三个选项并发现基于片段的任务流在行为上的差异。 假设我有一些简单的任务流模板 task-flow-template.xml managed-bean id__5managed-bean-name id__3viewBean/managed-bean-namemanaged-bean-class id__2com.cs.blog.ViewBean/managed-bean-classmanaged-bean-scope id__4request/managed-bean-scope/managed-beanmanaged-bean id__15managed-bean-name id__13flowBean/managed-bean-namemanaged-bean-class id__12com.cs.blog.FlowBean/managed-bean-classmanaged-bean-scope id__14pageFlow/managed-bean-scope/managed-beanview idMainViewpage/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__5managed-bean-name id__3viewBean/managed-bean-namemanaged-bean-class id__21com.cs.blog.FirstViewBean/managed-bean-classmanaged-bean-scope id__4request/managed-bean-scope/managed-bean managed-bean id__15managed-bean-name id__13flowBean/managed-bean-namemanaged-bean-class id__12com.cs.blog.FirstFlowBean/managed-bean-classmanaged-bean-scope id__14pageFlow/managed-bean-scope/managed-beanpublic 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__5managed-bean-name id__3viewBean/managed-bean-namemanaged-bean-class id__21com.cs.blog.SecondViewBean/managed-bean-classmanaged-bean-scope id__4request/managed-bean-scope/managed-bean managed-bean id__15managed-bean-name id__13flowBean/managed-bean-namemanaged-bean-class id__12com.cs.blog.SecondFlowBean/managed-bean-classmanaged-bean-scope id__14pageFlow/managed-bean-scope/managed-beanpublic 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} idr1/
af:separator ids1/
af:region value#{bindings.secondflowdefinition1.regionModel} idr2 / 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