介绍

当我们使用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范围相关推荐

  1. adf时间作用域_ADF任务流:页面片段的托管bean作用域

    adf时间作用域 介绍 当我们使用ADF任务流并需要实现一些特定于流的业务逻辑或存储一些与流相关的信息时,我们通常使用pageFlowScope托管bean. 而且,当我们需要为流的活动(页面或页面片 ...

  2. adf时间作用域_ADF:在任务流终结器中支持bean作用域

    adf时间作用域 介绍 当我们需要在任务流消失之前做一些最终工作(干净的资源,紧密的连接等)时,这是使用任务流终结器的非常普遍的建议做法. 和往常一样,我们使用在任务流中声明的托管bean. 托管Be ...

  3. ADF:在任务流终结器中支持bean作用域

    介绍 当我们需要在任务流消失之前完成一些最终工作(干净的资源,紧密的连接等)时,这是使用任务流终结器的非常普遍的推荐做法. 和往常一样,我们使用在任务流中声明的托管bean. 托管Bean可以具有不同 ...

  4. spring 托管bean_在非托管对象中使用Spring托管Bean

    spring 托管bean 即使我们想使用现有的最佳和最新技术,我们也必须处理遗留代码. 想象一下,新代码是用Spring框架的最新技术编写的,而旧代码根本不是用Spring编写的. 然后,在非托管S ...

  5. Thymeleaf抽取公共页面片段

    抽取页面 项目中,一般把所有的公共页面片段都抽取出来 放在一个独立的页面中 其他,所有的页面根据需要进行引用 参考文档 th:fragment 抽取公共元素 Name,随便自定义命名 <!DOC ...

  6. JSP页面中调用Spring Bean

    前言 spring boot 2.0.3.RELEASE spring mvc view : jsp JSP页面中调用Spring Bean 在 JSP 页面获得 WebApplicationCont ...

  7. 在非托管对象中使用Spring托管Bean

    即使我们想使用现有的最佳和最新技术,我们也必须处理遗留代码. 想象一下,新代码是用Spring框架的最新技术编写的,而旧代码根本不是用Spring编写的. 然后在非托管Spring对象中使用Sprin ...

  8. 风险提示:“美食流多品牌全托管加盟”涉嫌诈骗

    本论坛接到群众反馈"美食流多品牌全托管加盟"涉嫌诈骗.受害人及其亲友在2022年3月份通过美食流湖南服务商负责人杜某和张某,在长沙岳麓区金茂北塔写字楼23楼"湖南美食流智 ...

  9. 一小时,学习掌握瀑布流页面布局

    什么是瀑布流 瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部.其实瀑布流的特点就是参差不齐的排 ...

最新文章

  1. java中正则表达式函数_java正则表达式PHP中的正则表达式函数介绍
  2. java安全编码指南之:Thread API调用规则
  3. 多级队列调度算法可视化界面_冷月手撕408之操作系统(8)-处理机调度
  4. redis 内存不足 排查_Redis 系统学习之 redis 内存模型
  5. 【音视频安卓开发 (零)】用 Android NDK 编译 FFmpeg 与 X264
  6. linux强制关机启动后是白屏,解决安装Ubuntu后,启动出现屏幕空白(全黑,无内容)...
  7. RGB-D dataset
  8. 盲人方便的使用计算机输入文字,中文信息学报盲人用计算机软件系统中的语音和自然语言处理技术Ξ.PDF...
  9. 百度Q1营收241亿,李彦宏挥刀改革:“尽力了”没用,要确保在必须赢的战场上胜利...
  10. 产品经理面试:为什么想做产品经理
  11. java DataInput接口
  12. 我很忙,但对你随时有空!
  13. 计算机科学与技术审核评估专家,中国农业大学 业务动态 审核评估专家Sir Timothy深度走访网络技术中心...
  14. Chrome插件安装的3种方法,解决拖放不能安装的情况,并提供插件下载
  15. 微信没有回车键怎么换行_怎么换行-回答 | 为什么苹果的微信没有换行键,想换行怎么办?...
  16. python中秋月饼
  17. Redis配置主从服务器
  18. 做为一个中国的ITer,你感到耻辱吗?看CSDN的“软件中国2006风云榜之10大最具创新性技术”...
  19. < meter >标签 定义度量衡
  20. linux通过mount命令访问windows共享文件

热门文章

  1. happen-before原则的理解
  2. netflix 模式创新_创新设计模式:工厂模式
  3. java ee的小程序_Java EE应用程序的单片到微服务重构
  4. Java 14的新功能
  5. jooq中record_在Spring中使用jOOQ:CRUD
  6. Spring Boot完成示例
  7. 使用Arquillian(远程)测试OpenLiberty
  8. java 反射api_Java的反射API
  9. 使用Dropwizard度量标准监视和测量无功应用
  10. 使用JWT的Cloud Native应用程序