adf时间作用域

介绍

当我们使用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时间作用域

adf时间作用域_ADF任务流:页面片段的托管bean作用域相关推荐

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

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

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

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

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

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

  4. Thymeleaf抽取公共页面片段

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

  5. html设置页面指定时间切换,HTML实现双11抢劵(设定时间打开抢券的页面)

    废话不多说了,直接给大家贴代码了,具体代码如下所示: #result{ width:500px; border:1px solid #CCCCCC; background:#FFFFCC; margi ...

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

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

  7. spring bean作用域_Spring面试知识点,这是我见过最全面的 - 知识铺

    知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累.不占太多时间,不停地来唤醒记忆深处的知识点. Q1.什么是Spring框架? Spring是最流行的企业应用程序框架之一.Spring ...

  8. spring:Bean作用域

    在配置文件中定义Bean时,用户不但可以配置Bean的属性值及相互之间的依赖关系,还可以定义Bean的作用域.作用域将对Bean的生命周期和创建方式产生影响. spring 4.0中所支持的作用域: ...

  9. rethat安装MySQL多例_Spring框架-Bean作用域中单例模式和多例模式的区别

    Spring框架-Bean作用域中单例模式和多例模式的区别 一.单例模式的特点(当没有指定是单例模式还是多例模式的时候,默认是单例模式): 1.Spring容器创建的时候,对应的类的实例化对象一起被创 ...

最新文章

  1. leetcode算法题--Russian Doll Envelopes
  2. python解码函数_Python字符串中的两个解码与解码函数详解
  3. [ 转载 ] Handler详解
  4. 8. 大型网站架构演化
  5. redis JAVA hmset_Spring boot 连接Redis实现HMSET操作
  6. 全局唯一标识符 (GUID)
  7. linux 登陆sybase_远程连接sybase 数据库 步骤
  8. android 支持蓝牙4.0的手机型号
  9. 人工智能研究中心快递柜——代码分析十三
  10. 爬虫--Item Pipeline 介绍(21)
  11. sqlserver官方网站地址
  12. 30岁的女程序员该何去何从
  13. 车辆停放收费管理系统c语言,毕业论文 停车场收费管理系统
  14. 极路由1S(HC5661A)开启SSH功能
  15. 设某一个班共有N(N=20)名学生,期末考试5门课程,请编一程序评定学生的奖学金,要求打印输出一、二等奖学金学生的学号、姓名和各门课成绩。
  16. maven(一)--mvn安装、配置、基本命令
  17. 四元数算法 c语言,四元数算法运算规则及基本概念
  18. SQL 创建表的备份
  19. 两张图片告诉你 载波聚合为4G加速的原因
  20. redux-thunk的作用

热门文章

  1. 中控指纹采集器开发指纹识别项目(说明)
  2. 使用Servlet上传多张图片——Dao层(BaseDao.java)
  3. Servlet 登录时数据校验
  4. 2019蓝桥杯省赛---java---C---4(质数)
  5. 毕业设计word 表格标题 图表标题
  6. python 虚拟环境_理解Python虚拟环境
  7. df、du和fdisk命令的区别
  8. java国际化——资源包
  9. 机器学习java_Java机器学习,第1部分
  10. cloudwatch_将CloudWatch Logs与Cloudhub Mule集成