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

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时间作用域

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java接口抽象方法_Java 接口 抽象类 抽象方法

abstract class elehousekeeping { //抽象家用电器类abstract void opermode(); //抽象方法}class TV extends elehousekeeping { //电视机public void opermode() {System.out.println("13:12 TV is working.");}}class aircondition extends elehousekeeping { //空…

IMA文件如何打开,winimage使用方

一般先用UltraISO打开一个系统的镜像文件&#xff08;.iso&#xff09;。其中有些文件&#xff08;尤其是.ima,img&#xff09;比如下面雨林木风Ghost系统盘的这个IMA文件&#xff0c;我们先提取到桌面 用WinImage打开这个文件即可发现这个IMA文件整合了很多东西。所以&#x…

Java的几何布朗运动

Wiener过程是连续时间随机过程&#xff0c;以纪念Norbert Wiener命名。 通常用于用随机成分表示噪音或财务状况。 可以计算几何布朗运动以可视化某些界限&#xff08;以分位数表示&#xff09;以暗示绝对范围。 为了进行计算&#xff0c;需要以下参数&#xff1a; &#xff0…

上传图片,多图上传,预览功能,js原生无依赖

最近很好奇前端的文件上传功能&#xff0c;因为公司要求做一个支持图片预览的图片上传插件&#xff0c;所以自己搜了很多相关的插件&#xff0c;虽然功能很多&#xff0c;但有些地方不能根据公司的想法去修改&#xff0c;而且需要依赖jQuery或Bootstrap库&#xff0c;所以我就想…

mongodb java id 查询数据_java 用 _id 查找 MongoDB 下的数据

找网上的资料看了下增删改查&#xff0c;等日后补上。已经实现了数据的插入&#xff0c;现在想通过 _id属性来查找数据。一开始看到 类似 55b321df715cc162076eb466 这么一长串的内容觉得是string类型。但是发现并不能搜索到结果&#xff0c;在网上搜到了解决方案&#xff1a;S…

js中的面向对象入门

http://www.cnblogs.com/chenmeng0818/p/6508755.html 什么是对象 我们先来看高程三中是如何对对象进行定义的 "无序属性的集合&#xff0c;其属性可以包括基本值、对象或者函数"&#xff0c;对象是一组没有特定顺序的的值。对象的没个属性或方法都有一个俄名字&…

maven 父maven_Maven不会吮吸。 。 。 但是Maven文件会

maven 父maven我不会参加整个Maven辩论&#xff0c;但可以说我是所有最佳实践的坚定支持者&#xff0c;对我而言&#xff0c;Maven是最佳实践的体现。 我的意思是说&#xff0c;Maven是围绕特定的最佳实践构建方法构建的。 注意&#xff0c;我说了一种特定的最佳实践构建方法。…

java maven部署_eclipse中maven项目部署到tomcat

下面就一一介绍这几种部署方式&#xff1a;1.打war包到tomcat/webapps目录这种方式其实跟非maven项目没什么区别&#xff0c;就是打包的方式不同之后在target目录下会生成war包&#xff0c;复制到tomcat/webapps目录即完成部署。2.使用tomcat-maven插件&#xff0c;在pom.xml的…

word 论文排版 —— 按指定格式章节的自动编号

在word中如何实现章节标题自动编号 标题样式与标题的编号是两个步骤&#xff0c;为标题建立编号是在为标题样式确定的基础后进行的。这是显而易见的&#xff0c;也即只有先定义了多级标题&#xff08;也可使用 word 自带的标题样式&#xff09;&#xff0c;才可为这些多级标题自…

vb 获取mysql表第一行数据_vb如何将远程获取的数据插入本机数据表中

双击按钮添加如下代码Private Sub Command1_Click()Dim objRemoteConn As New ADODB.ConnectionDim objLocalConn As New ADODB.ConnectionDim objRs As ADODB.RecordsetDim strSql As StringobjRemoteConn.Open "providerSQLOLE…

ASP渲染下拉框使时间依次减少

<% xyear(now()) yyear(now())-1 Do While y>2002%><li><a href"#2015" class"treeview-time"><%y%></a></li><% yy-1 loop%>转载于:https://www.cnblogs.com/mazey/p/6512893.html

Spring Cloud对Hystrix的支持

Spring Cloud项目为Netflix OSS Hystrix库提供了全面的支持。 之前我已经写过有关如何使用原始Hystrix库包装远程调用的文章。 在这里&#xff0c;我将探讨如何将Hystrix与Spring Cloud结合使用 基本 实际上并没有什么大不了的&#xff0c;这些概念仅在特定于Spring引导的增强…

OA系统部署短信过程

安装dotNetFx40_Client_setup.exe插件 安装mysql_installer_community_V5.6.21.1_setup.1415604646.msi数据库 根据数据库版本安装相应驱动&#xff08;64位或者32位系统&#xff09; 安装mysql-connector-odbc-5.3.7-winx64.msi驱动&#xff08;ODBC&#xff09;工具 安装mysq…

centos6配置mysql5.7_CentOS 6/7 下 MySQL 5.7 安装部署与配置

一、前言1、本教程主要内容MySQL 5.7安装(yum)MySQL 5.7 ROOT账号密码修改MySQL 5.7基础使用与配置MySQL shell管理常用语法示例(用户、权限等)MySQL字符编码配置2、本教程环境信息与适用范围环境信息软件版本CentOS7.4 ReleaseMySQL5.7适用范围软件版本CentOSCentOS 6 & C…

hadoop伪分布式搭建 java_hadoop2.2.0伪分布式搭建

第一步&#xff1a;安装jdk我的linux版本是centos7&#xff0c;使用最简单的安装方式&#xff0c;这里首先说一下&#xff0c;由于系统会预装openjdk版本等其他各种版本&#xff0c;首先要做的是清除这些版本&#xff0c;然后iu安装oracle的jdk版本1.1 查看所有jdk版本并删除其…

北斗有 35 颗卫星,而 GPS 有 24 颗卫星,为什么二者数量不同?

作者&#xff1a;知乎用户链接&#xff1a;https://www.zhihu.com/question/21092045/answer/17164418来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。反对目前的两个不靠谱回答&#xff01;需要的卫星数目和别人占坑没有…

可行的DeltaSpike教程

在一个最近的项目中&#xff0c;我遇到了一个有趣的问题&#xff1a;采用被赋予单个对象的服务方法&#xff0c;并在一个夜间过程的上下文中重用相同的代码&#xff0c;该过程独立于应用程序而在数千个相同类型的对象上运行。 试图在两个地方维护如此大小和复杂性的相同过程真…

2017/3/8 函数指针/事件/委托....

函数指针&#xff1a; 定义&#xff1a;函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量&#xff0c;只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样&#xff0c;这里是指向函数。 函数指针有两个用途&#xff1a;调用函数…

java finalize 析构_close,析构函数和finalize:Java矛盾

try { FileInputStream in new FileInputStream(filename);BufferedReader readernew BufferedReader(new InputStreamReader(in));String line;while((linereader.readLine())!null){// read the file}}catch (Exception e) {System.out.println(e);}但是如果我尝试将命令添加…

sharesdk短信验证码的集成

在ShareSDK官网http://mob.com/注册并创建Android应用.申请APP_key,下载SDK等 根据官网开发文档导入SDK,目录结构如下 将以上文件按需放入Android Studio项目所要使用SMSSDK的Module所在的Libs里面&#xff0c;再在Module的build.gradle里面将libs加入仓库&#xff08;reposito…