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,一经查实,立即删除!

相关文章

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…

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

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

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;才可为这些多级标题自…

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

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

sharesdk短信验证码的集成

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

java四神兽_SpringCloud五大神兽之Eureka

注册中心概述什么是注册中心&#xff1f;相当于服务之间的‘通讯录’&#xff0c;记录了服务和服务地址之间的映射关系。在分布式架构中服务会注册到这里。当服务需要调用其他服务时&#xff0c;就在注册中心找到其他服务的地址&#xff0c;进行调用注册中心的主要作用&#xf…

windows下dubbo-admin和zookeeper安装部署

1. 概述 ZooKeeper是Hadoop的正式子项目&#xff0c;它是一个针对大型分布式系统的可靠协调系统&#xff0c;提供的功能包括&#xff1a;配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务&#xff0c;将简单易用的接口和性能高效、…

jpush java api_JPush極光推送Java服務器端API

產品功能說明極光推送(JPush)是一個端到端的推送服務&#xff0c;使得服務器端消息能夠及時地推送到終端用戶手機上&#xff0c;讓開發者積極地保持與用戶的連接&#xff0c;從而提高用戶活躍度、提高應用的留存率。極光推送客戶端支持 Android, iOS 兩個平台。本 Android SDK …

Maven详解(转)

转自 https://www.cnblogs.com/hongwz/p/5456578.html 一.前言 以前做过的项目中&#xff0c;没有真正的使用过Maven&#xff0c;只知道其名声很大&#xff0c;其作用是用来管理jar 包的。最近一段时间在项目过程中使用Maven&#xff0c;用Maven构建的web项目&#xff0c;其项目…

java商品编写代码_商品品牌业务之后台Java代码的编写

今天是刘小爱自学Java的第146天。感谢你的观看&#xff0c;谢谢你。商品品牌业务之后台Java代码的编写-1.jpg (50.46 KB, 下载次数: 1)2021-2-5 00:22 上传学习计划安排如下&#xff1a;昨天实现了前端页面的编写以及发送请求&#xff0c;今天关于异步请求工具axios的简单说明。…

java中8种数据类型和默认值所占字节数

java 8种基本数据类型的默认值及所占字节数通过一段代码来测试一下 8种基本数据类型的默认值 1 package dierge;2 3 public class Ceshi { 4 int a; 5 double b; 6 boolean c; 7 char d; 8 float f; 9 byte e; 10 long h; 11 short j; 12 public static void main(String…

软件测试实验1:为三角形问题编写一个Java程序,并用Junit测试程序

实验报告 实验内容&#xff1a; 1.Install Junit(4.12), Hamcrest(1.3) with Eclipse 2.Install Eclemma with Eclipse 3.Write a java program for the triangle problem and test the program with Junit. 实验步骤&#xff1a; 1.在eclipse中安装Junit、Hamcrest和eclemma。…

SurfaceFlinger与Surface概述

基本原理&#xff1a; SF一个Client对应一个app中的SurfaceComposerClient&#xff0c; 分别是Binder的n端和b端&#xff0c;主要用来CreateSurface 一个app中有多个Activity&#xff0c;一个Activity一般有一个Surface(除SurfaceView&#xff0c;一个View就有一个Surface)&…

拼图项目动手指南

Jigsaw项目将把模块化引入Java平台&#xff0c;根据原始计划&#xff0c;它将在12月10日完成功能。 所以我们在这里&#xff0c;但是拼图在哪里&#xff1f; 在过去的六个月中肯定发生了很多事情&#xff1a; 原型问世 &#xff0c;内部API的迫在眉睫的删除引起了很大的骚动 &…

java实现回文验证_LeetCode 精选 TOP 面试题(Java 实现)—— 验证回文串

文章目录一、题目描述1.1 题目验证回文串给定一个字符串&#xff0c;验证它是否是回文串&#xff0c;只考虑字母和数字字符&#xff0c;可以忽略字母的大小写。说明&#xff1a;本题中&#xff0c;我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a cana…

java开发门禁指纹,指纹门禁

大兀人脸识别控制系统USB指纹仪DW9拓扑图(指纹为java系统直接采集、云或控制板直接比对&#xff0c;无需二次注册&#xff0c;人脸为htttp上传服务器或rtsp视频流比对方案)大兀活体指纹门禁采用BS架构&#xff0c;已集成进大兀人脸识别系统&#xff0c;如二次开发可直接调用jav…

使用Selenide进行有效的UI测试

等待奇迹 圣诞节是奇迹的时刻。 在新的一年的前夕&#xff0c;我们都为下一年制定了计划。 我们希望所有问题都将在最后一年消失&#xff0c;在来年出现奇迹。 每个Java开发人员都梦想着创造一个奇迹&#xff0c;使他成为世界上最有效的Java开发人员。 我想向你展示这样的奇…

android之seekbar

做了一个拖动滑块改变数值的demo 下附上代码: <SeekBar android:id"id/myseekbar" android:layout_width"match_parent" android:layout_marginTop"20dp" android:thumb"drawable/slider" android:layout_height&qu…