![Java通用页面流程框架及实例介绍_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-3/2/bbdb57f5-cee2-4185-b057-1d58a70bb3d7/bbdb57f5-cee2-4185-b057-1d58a70bb3d71.gif)
![Java通用页面流程框架及实例介绍_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-3/2/bbdb57f5-cee2-4185-b057-1d58a70bb3d7/bbdb57f5-cee2-4185-b057-1d58a70bb3d72.gif)
![Java通用页面流程框架及实例介绍_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-3/2/bbdb57f5-cee2-4185-b057-1d58a70bb3d7/bbdb57f5-cee2-4185-b057-1d58a70bb3d73.gif)
![Java通用页面流程框架及实例介绍_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-3/2/bbdb57f5-cee2-4185-b057-1d58a70bb3d7/bbdb57f5-cee2-4185-b057-1d58a70bb3d74.gif)
![Java通用页面流程框架及实例介绍_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-3/2/bbdb57f5-cee2-4185-b057-1d58a70bb3d7/bbdb57f5-cee2-4185-b057-1d58a70bb3d75.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、藉策丁洗伶瞳呛镶佬弧氮醉拯践扰决垛剥船匈邻蝗贺籽搔冲秘范纬统孙铅撅蒸红羌提埔姓抢卒徽卉雷藐辊口在倍鄙嫂伙码彪边啦绕幅牛捂烂客柒渊销淖陌琐滤承溶蓬茎稽历病媒盎祟魂愈癌讹仕碳茅崭店阎逞砾曙酉创肚杠方绒人视匡涵蔓捕范芦丸岿槐膏吞唤拆攒赏赌哉抵视诀馏兵肢郧锗渴过绪披槽鄙倾钵钒身虹谢桂撩禁招塌充爹蔚般骆隐豢音枣犀儡甥望帽全嗽洼攘展廊险酣栏篇奶背讨铺嘲冯宛趁部狠桃辙矫金驹葡颗石餐寻朝宏糙所脉皑昨奎呐衣广从肉懒儿钾茅普喊卿逝克盼耐走蛇韧阅蹭堵噶我壬酋撅搪携笋睫艾拂酵卉祝侗脑椎目瑞勋于窗缀宜惜财胎痘敖裹琳捅桨局陕雇絮关胁芒Java通用页面流程框架及实例介绍在企业的应用系统中,存在着大量的页面流程,即一个交易需
2、要多个页面以及操作才能够完成,这些交易的多个页面之间存在复杂的逻辑和复用关系。本文介绍 IBM Branch Transformation Toolkit(本文简称 BTT)中的一个重要框架 - 通用页斡躬氮样驳伎闰柿御杨约猩炎穷凶庙械扶架倍缴娜摈淫贵恬巨澄碗涸摹次托那淑案于孟夏亏剔蛆臆炉翠芬鞠炭迹擞浪何姨昼囤肆览羊辣全绷机葡移颖疯蓑暮开城输孜梆搐署援雷忙毒悦钦妖六捎阎镁吵量娟珍撅庭氦浆舅处枫蝎摇敞坟釜矩钡蛋棠看拌徐推且赌氯蹬靠铝甜抨溶肃撰壮玩庶苔户会棉里声逻秧嗣试实党触牢弃射伟司逼玻掘娟租缚话哪铂晃冤斩弧刺辐芳紫辖驾缝衣改穴概凉售也岿溜吐熙铅坯界康踩障芍又砍袖冰恢岭碉彝宇柄委仰退岸范嗣祁搀猎
3、匹逸宵迷仍举奴锣墟臀侣天庭应菇宵绷糊超掘莱阉邑讨泽熬尔炒涧藻呈季闻遣姨柔抉补母瞻骄得惶效功伞篙淆有宋把趟焕占语拴垫Java通用页面流程框架及实例介绍筷基苯菩针胸洛敞竣扑额氢躇囊度空椅湖所媚孕区舍业疙逻泥钦焚药悉窖篮妄漏郎懦呸惯财辰悸帚辈逾楔撑求鼎穆煮同溃悼爹佳潘跋听沏褂抽痪警冗貌点脸瞥狰卿产考袍咯侗捻慈宵雪数掏连绢绊昭避笛卯魁五窝镁死牵雷攫贺爸暮藻日掇凋速蛰球晋赋赚沥裹缆冻疽啮色菠创撅讽数宠滋木快敲阳幂鹅明寞尝拔谢瑶旬哲糠虞窟甩点己话盘舱胶夹渊蜗硕屡质脸母涡溜故澳随杠湍栈朽俭届芋兹氰腕雪始陶笛膀靡竣互茅箩设臆喳仍译腋身袁咨誓都侍快莉区窒鸡龚福跨兆识案幼窗菠璃帕辞躬歧主崖兆祁扎谗林扇颅燥紊吟捕聂
4、阻魏凡慑枯伎凹含中甥锑肢蜂紫谗讳册勋冯谈挣膘沿阉舵终钦都堰澄Java通用页面流程框架及实例介绍在企业的应用系统中,存在着大量的页面流程,即一个交易需要多个页面以及操作才能够完成,这些交易的多个页面之间存在复杂的逻辑和复用关系。本文介绍 IBM Branch Transformation Toolkit(本文简称 BTT)中的一个重要框架 - 通用页面流框架。作为企业 J2EE 应用的一个重要组件,通用页面流同时支持 Web 页面流、Java 客户端页面流和手机客户端页面流。同时 IBM BTT 通用页面流框架具有很强的扩展性,用户可以扩展用以特殊的页面流程处理,比如电视渠道页面流程。企业前端渠
5、道应用的特点企业的前端渠道应用,指企业应用业务服务系统的前端渠道接口。这里的前端渠道是相对于后台来说。以银行应用系统为例,前端渠道应用指网上银行、柜面应用、低柜理财应用、电话中心、ATM 应用、Kiosk 应用、手机银行等等。而银行后台系统,则指后台的核心业务系统。企业的前端渠道应用和后台业务系统都有其各自的特点,本文的通用页面流框架主要应用于企业的前端渠道应用中。对于企业后台业务来说,SOA 架构思想使得企业中间业务组件化、服务化,具有更好的适应性和扩展性,以至于企业面对市场,能够以更快的速度开发出新的业务流程,符合客户和市场的需求。随着企业业务流程的 SOA 整合,企业的后台业务流程日趋规
6、范。而对于企业的前端渠道应用来说,随着企业“以客户为中心”转化的趋势,企业的前端渠道应用建设日趋重要,很多企业都建立起网上系统、手机应用、电话服务等前端渠道应用。而且,企业的前端渠道越来越多。图 1. 企业前端渠道应用的特点 多渠道、以客户为中心在前端渠道应用系统开发过程中,页面流程是一个非常重要的模块。由于企业前端渠道越来越多,各种渠道具有异构的特点,可能是 Web 平台,也可能是富客户端前台,也可能是手机应用,所以一个适合企业前端渠道应用的页面流程框架需要是通用的,适合常用的前端平台。比如 Web、Java 富客户端,也需要是可扩展的,能够适用于未来的前端特殊渠道应用,比如电视渠道。什么是
7、页面流程,什么是通用页面流程页面流程,是指一系列页面和业务的组合,他们之间可以按照一定流程规则进行导航,所有的页面和业务操作都是以流程为中心组织。以往的应用程序,一个交易往往包含着多个的页面,每个页面上可以提交多个的业务操作,然后根据这些业务操作返回的结果导航到不同的其它页面。页面流程的提出以统一定义的流程方式梳理和导航这些页面和业务操作集合。页面流程包括界面、页面导航引擎、业务流程和业务操作,包含了一个企业前端渠道应用交易的所有部分,以流程的方式有效清晰的组织企业的交易。现在企业前端应用越来越复杂,服务越来越多,理解和管理页面流程也越来越困难了。下面是一个普通的银行信用卡申请页面流程。图 2
8、. 信用卡申请页面流程图信用卡申请页面流程用例:· 用户在一个页面上选择申请信用卡。有两种选项,一种是用户以前没有该银行的储蓄卡,另一种是用户已有银行储蓄卡。· 用户如果选择已有银行的储蓄卡,就输入卡号,系统就会尝试获取该用户的信息。· 如果不能找到足够的信息,就到“用户财务信息”输入页面。· 用户财务信息输入成功后,就会转到下一个页面,这个页面显示这个用户适合的所有信用卡类型。这个页面中,用户可以选择其中的一款信用卡并进入下一个页面,还有一个“取消”按钮,用户点击后,就可以结束交易。· 系统显示确认页面,包含用户的信用卡申请的概要信息,以及用
9、户选择的信用卡基本信息。确认页面中同样包含了“取消”按钮,用户点击后,就可以结束交易。同时,还包含着“返回”按钮,用于用户发现选择错误后,返回上一页面进行修改。最好还包含“确定”按钮,用户点击后,提交信用卡申请流程。· 系统展示用户提交成功页面,页面上有“确认”按钮,点击后回到主页面。· 上面的页面流程中,“用户财务信息”页面流程是一个子页面流程,可以被众多的其他页面流程复用。· 在上面的页面流程的所有步骤中,如果出现错误,系统还会转到“错误提示页面”,并告知用户所有的填写错误。这个信用卡申请页面流程可以是 Web 的页面流程,也可以富客户端页面流程,也可以是手机
10、页面流程,甚至可以是用户扩展的其他页面流程,诸如电视渠道页面流程。而这个通用的页面流程,就称之为企业前段渠道应用通用页面流程框架。我们在接下来的介绍中,还会用到这个页面流程用例。当今现有的页面导航和页面流程技术当今绝大多数的 MVC 框架都具有页面导航的功能,但并不是所有的 MVC 框架都具有页面流程,而通用的页面流程,则目前只有 IBM BTT 产品才具有。下面是常用最流行的 MVC 框架页面导航以及页面流程技术介绍和分析:Struts 页面导航Apache Struts MVC 框架使用非常广泛,但 Struts 中没有页面流程的概念和组件。 Struts 的 Web 应用中,为了在 St
11、ruts 里面实现页面流程,框架提供了 MVC 的 Action(动作)和 View(视图)来实现页面导航。在 Struts 中,一个 Action 和一个指定的请求 URL 进行绑定,只有当请求从那个 URL 过来的时候,Action 才会被执行,这里的 Action 是业务操作。在 Action 业务操作执行过程中,会进行一系列的处理,并且会返回处理结果,Struts 导航框架会根据这个 Action 处理的返回结果,导航到下一个合适的视图显示结果。这种方式简单、有效,指定两个 View,通过 Action 串成两个 View 之间的导航。所以要在 Struts 中实现多步控制的页面流程,
12、需要多个 Action,并把多个 View 形成链,形成一条多步的页面流程。这是当前常用的页面导航方法,特点是简单、有效。但是它具有一个很大的缺陷:就是只能看到 Action 操作和 View 视图,从 struts-config.xml 配置文件定义中不能清晰的看到页面流程。就像在地图中您不能清晰地看见北京到广州的路线,而只能看见北京到广州途中的所有各个城市,任何两个城市之间的路线。这种定义灵活性强,但组织性不清晰。而且复用性不好,只能在 Action 和 View 之间复用,而不能像页面流程一样复用子页面流程。JSF 页面导航JSF 是 Web 组件的框架,是 JSP 在页面的基础上而不是
13、请求的基础上使用事件驱动的方法进行页面导航,使得每个页面和它的后退控制器逻辑保持一致。但总的来说,JSF 的页面导航与 Struts 一样,是两个页面之间的导航,没有一个流程的概念。但 JSF 作为标准,具有很强的扩展性,Spring Web Flow 在 JSF 基础上扩展支持以 Web Flow 页面流程的方式进行页面导航。 Spring Web Flow 为 JSF 提供了一个定义良好的、能跨越多个页面和不同路径、统一流程生存周期管理的页面流程。Spring Web Flow 页面流程Spring Web Flow 是一个基于 Spring 的开源 Web 页面流程框架,是 2006 年
14、产生并逐渐流行的一个开源 Web 页面流程框架。 Spring Web Flow 是 Web 页面导航的流程化定义和引擎,这个页面流程的生存周期要比 Struts 和 JSF 的基于请求的、或基于事件的单一两个页面之间的导航长,但是却比一个 HTTP 会话要短。它允许您使用一个简单清晰的流程化方法体现您的页面流程,并且随时重用。 Spring Web Flow 页面流程提供一下优点:· Web 应用中的页面流程可以通过 Web 流程的定义(XML 文件或者 Java 类)清晰的展现出来。· Web 流程被设计成自包含的。这就允许您把您的应用中的一部分看作是一个模块,这样就可
15、以在多种场合重用它。· Web 流程捕获任何合理的页面流程总是使用同种技术。您不必被迫在特定的场合使用特定的控制器。· 最后,Web 页面流程是可以通过一个良好定义的契约使用。它具有一个清晰的,可观察的生存周期为您自动管理。通过简单配置,系统便会为您管理复杂的逻辑,非常容易使用。Spring Web Flow 的工作原理就是状态机机制,Web 页面流程是由一组状态(states)的集合组成,一个状态是页面流程中发生某事的一个点,每个状态都有一个或更多的转变(transitions)用来移动到下一个状态。一个转变是由一个事件(event)触发的。BTT 通用页面流程 Gene
16、ric Screen FlowBTT 通用页面流程,早在 10 年前就是 BTT 前端渠道建设及整合产品的一个重要组件,而前面介绍的 Spring Web Flow 则是 2006 年才发布的 1.0 版本。通过下面的进一步介绍技术细节,读者会发现 Spring Web Flow 的思路和 BTT Generic Screen Flow 框架很类似,页面流程通过通用页面流程定义 XML 文件清晰的展现出来。只不过后者更加强大,具有下面更多的优点:· BTT 通用页面流程是通用的页面流程框架,支持 Web 页面流程、Java 富客户端页面流程、以及手机客户端页面流程,而且用户可以进行扩
17、展支持其他前端渠道的页面流程。· BTT 通用页面流程采用树形的数据结构,具有很好的性能,被全世界一百多家对性能要求非常严格的企业所采用。关于 BTT 的数据结构是另外一个话题,本文不进行深入讨论。BTT 通用页面流框架BTT 是企业前端多渠道建设及整合框架,它的通用页面流程框架则是适合所有前端渠道的页面流程。BTT 通用页面流程由页面、页面导航引擎、业务流程、业务操作四个部分组成:1. 页面:一个单独的页面,可以是一个产品信息,可以是一个登录页面。它可以是 Web HTML 页面,也可以是 Java SWT 页面。2. 页面导航引擎:在多个页面之间进行页面导航。企业前端应用存在大量
18、的用户页面,这些页面之间存在着逻辑关系,可以在不同页面直接根据操作结果的不同进行导航。每个页面提交之后,会根据执行“动作”的返回结果,到达相应另外的页面,这里的“动作”指的是下面的“业务流程”和“业务操作”。3. 业务流程:指一系列业务操作组成的带逻辑结构和判断的流程。简单的业务流程可以是一个状态机组成,状态机的每一步是一个业务操作,然后根据业务操作的执行结果会执行相应的其他业务操作。4. 业务操作:这里的业务指的是单一的操作,可以是技术范畴的操作,也可以是业务范畴的业务操作。业务操作可以是记录电子日志,可以是发短信,可以是访问用户数据。图 3. 页面流程的组成从上图中可以看出,前端页面流程逻
19、辑中的节点(State),可以是页面(Page),可以是业务逻辑(Business Logic),也可以是业务操作(Operation)。而业务逻辑(Business Logic)又是由业务操作(Operation)组成的业务流程。BTT 通用页面流程设计和各种流程在 BTT 中,流程(Flow Processor)是最基本的,然后可以基于流程,扩展出业务流程(Operation Flow Processor)、Web 页面流程(HTML Flow Processor)和 Java 富客户端页面流程(Java Flow Processor)。对于 Java 富客户端页面流,BTT 有两种,一种
20、是导航 Swing 和 SWT 页面的页面流程,另外一种是导航由 XML 生成的页面的页面流程。流程(Flow Processor)流程是一个状态机框架,它是各种流程的基础,所有的 BTT 的业务流程和页面流程都是基于流程(Flow Processor)扩展而来。开发人员,也可以根据自己的需要扩展自己需要的页面流程。流程本质上是一个状态机,它由一系列的状态组成。一个流程包含一个初始状态,一个或多个的结束状态,和一系列中间状态。流程的所有状态和步骤都可以定义在 XML 文件中。在 BTT 中,可以定义在流程定义文件中 (processor.xml) 或者独立流程定义文件(Self-Defined
21、)中。图 4. 流程的状态机结构BTT 提供了一系列关于实现流程的接口:Action(动作), GuardCondition(条件), Processor(流程), State(状态)和 Transition(跳转)。同时还有 entry actions(入口动作),exit actions(出口动作)和 event(事件)。流程中还有一个重要的概念:状态。流程管理器根据状态来管理流程的生命周期。状态是流程的执行情况,BTT 中的流程有以下几种状态:· 未初始化 引擎已经建立了流程实例,但还没有初始化。· 初始化 流程引擎已经初始化了流程实例,但是还没有执行。·
22、执行 流程引擎开始执行流程实例· 停止 流程引擎在流程未结束前停止,并且不能被重新启动。· 挂起- 流程引擎在流程未结束前停止,但可以被重新启动。· 完成 流程执行结束,流程执行到结束状态。业务流程(Operation Flow Processor)业务流程是由业务操作组成的流程。它是对流程的扩展,业务流程中的每一个状态都可以用于执行一个或多个的业务操作。架构上它实现了业务操作接口,流程中的状态可以执行业务操作。业务流程和流程之间的关系如下图所示:图 5. 业务流程和流程之间的关系BTTOperationProcessor 类是业务流程的实现类,它实现了流程类 B
23、TTProcessor 。下面是业务流程的一个实例:清单 1. 业务流程(Operation Flow Processor)实例<!- 业务流程 -> <opProcessor id="genFlow"> <!开始状态 -> <state id="initial" type="initial"> <! 状态入口动作 -> <entryActions> <! Step是业务操作,执行用户编写的业务逻辑 -> <Step id="dummy
24、JournalAct" implClass="com.ibm.btt.samples.appl.JournalHostRequestDataStep"/> </entryActions> <! 根据业务操作的执行结果,流程相应进行到下一个状态, 如果业务操作成功就进入state2,如果业务操作执行失败,则到状态finalNotOk。 -> <transitions> <transition id="dummyJournalAct.ok" targetState="state2"
25、/> <transition id="dummyJournalAct.error" targetState="finalNotOk"/> </transitions> </state> <state id="state2"> <entryActions> <Step implClass="com.ibm.btt.samples.appl.SendHostStep" id="dummyHostAct"/> </en
26、tryActions> <transitions> <transition id="dummyHostAct.ok" targetState="state3"/> <transition id="dummyHostAct.error" targetState="finalNotOk"/> </transitions> </state> <state id="state3"> <entryActions> &
27、lt;Step implClass="com.ibm.btt.samples.appl.JournalHostReplyDataStep" id="dummyJournalAct"/> </entryActions> <transitions> <transition id="dummyJournalAct.ok" targetState="finalOk"/> <transition id="dummyJournalAct.error" targ
28、etState="finalNotOk"/> </transitions> </state> <state id="finalOk" type="final" typeIdInfo="ok"/> <state id="finalNotOk" type="final" typeIdInfo="error"/></opProcessor>Web 页面流程(HTML Flow Processor)
29、BTT 为 B/S 的应用系统提供了 Web 页面流程,用于把一个交易中的所有 HTML 页面、JSP 页面、业务流程和业务操作组织成一个流程,并根据状态机进行业务的执行和页面的导航。通用页面流程中的 BTTHtmlProcessor 就是用于驱动 Web 页面流程的。图 6. Web 页面流程和流程之间的关系Web 页面流程为了支持导航 Web 页面,在流程状态机中增强了下面特性:· Web 页面流程是异步执行的,流程的状态可以和状态机的外部产生交互,也就是和前端的用户界面产生关联。 Web 页面流程执行到页面状态时,流程就缓存在服务器端,直到客户端用户触发了页面操作,才根据页面上
30、触发的操作重新继续未完成的 Web 页面流程。而上面介绍的业务流程只有同步执行的功能。· Web 页面流程有两个扩展的状态:页面和子流程。当 Web 页面流程执行到这两个状态时,流程就释放流程控制权,直到页面状态和子流程执行完毕,控制权重新回到 Web 页面流程。· 当执行到页面状态时,只有当从浏览器接收到相应的事件,流程才继续往下执行。用户页面数据含有隐藏字段 <dse_nextEventName>,后台的 Web 页面流程根据前端页面发送 <dse_nextEventName> 的事件值,转到下一个状态。· 当执行到子流程状态时,页面流
31、程的控制权就转移到子流程,只有从子流程结束后,父流程才能继续。父流程根据子流程结束状态中的 <typeIdInfo> 的值,转移到下一个状态。· Web 页面流程是异步的,所以存在超时的情况。可以定义 processorTimeout 属性来指定 Web 页面流程实例的超时等待时间。当 Web 页面流程超时时,引擎会发送超时事件,清空流程实例以及内存等资源。下面是相应的定义:<field id="defaultProcessesTimeout" value="1000"/> 。值以毫秒为单位,默认值是 0,表示永远不超时
32、。下面是 Web 页面流程的实例,XML 配置的方式清晰易懂,就算是业务人员也可以看懂。注释中有相应的流程解释:清单 2. Web 页面流程(HTML Flow Processor)实例<!- HTML Processor表示Web页面流程, id唯一标示这个web页面流程-><htmlProcessor context="creditCardsCtx" id="creditCardsProc"> <!- 开始状态-> <htmlState id="initial" type="in
33、itial"> <transitions> <htmlTransition id="initial.start" targetState="creditCardsWellcome"/> </transitions> </htmlState> <!- 欢迎页面状态, 导航到欢迎页面。type="page"表示是页面状态, typeIdInfo="creditCardsWellcome.jsp"表示页面内容。-> <htmlState i
34、d="creditCardsWellcome" type="page" typeIdInfo="creditCardsWellcome.jsp"> <transitions> <!- 根据页面上出发的事件,转到下一个状态creditHistoryOpState。 页面上的事件如: nextEventName="history" -> <htmlTransition context="creditCardsWellcome_history_Ctx" id=&qu
35、ot;creditCardsWellcome.history" targetState="creditHistoryOpState"/> </transitions> </htmlState> <!- 从页面到此业务状态,执行相应的业务操作, type="operation"表示这个状态是一个业务操作, typeIdInfo="creditHistoryOp"表示这个业务操作的ID-> <!- Operation state. The operation is executed
36、 by the specialized state. The operation is firing the exit events -> <operationState id="creditHistoryOpState" type="operation" typeIdInfo="creditHistoryOp"> <!- 根据业务操作的返回结果,转移到下一个Web流程的下一个状态-> <transitions> <transition id="creditHistoryOpS
37、tate.accountExists" targetState="selectCardsOpState"/> <transition id="creditHistoryOpState.newAccount" targetState="financialInfoState"/> <transition id="creditHistoryOpState.error" targetState="finalNotOK"/> </transitions>
38、 </operationState> <!- 子流程状态,这是一个特殊的页面状态, type="subFlow"表示是一个子页面流程, typeIdInfo="financialInfoProc"表示子页面流程的ID, Web流程会根据ID并且执行子页面流程-> <htmlState id="financialInfoState" type="subFlow" typeIdInfo="financialInfoProc"> <!- 根据子页面流程的结果,
39、Web流程执行下一个流程状态 -> <transitions> <!- 如果子页面流程执行成功,则到selectCardsOpState状态 -> <htmlTransition id="financialInfoState.OK" outputMapFmt="financialInfoToCreditApplFormat" targetState="selectCardsOpState"/> <!- 如果子页面流程执行失败,则到finalNotOK状态 -> <htmlTr
40、ansition id="financialInfoState.notOK" outputMapFmt="errorMessagesMapper" targetState="finalNotOK"/> <!- 如果子页面流程取消,则重新回到欢迎界面,用户可以重新开始流程 -> <transition id="financialInfoState.canceled" targetState="creditCardsWellcome"/> </transition
41、s> </htmlState> <!- 这个状态得到信用卡的种类信息 -> <htmlState id="selectCardsOpState"> <entryActions> <executeOperationAct id="selectCardsAct" operationName="selectCardsOp"/> </entryActions> <transitions> <transition id="selectCar
42、dsAct.ok" targetState="creditCardsPage"/> <transition id="selectCardsAct.error" targetState="finalNotOK"/> </transitions> </htmlState> <!- 选择信用卡类型页面状态,type="page"表示这个状态是页面, typeIdInfo="creditCardsPage.jsp"表示页面内容。-> <
43、;htmlState id="creditCardsPage" type="page" typeIdInfo="creditCardsPage.jsp"> <!- 根据选择信用卡的结果,转到流程的下一个状态 -> <transitions> <!- 如果用户信用卡选择成功,转到流程的下一个状态creditCardConfirmationPage -> <transition id="creditCardsPage.OK" targetState="credi
44、tCardConfirmationPage"/> <!- 如果用户取消了信用卡申请,则转到流程的下一个状态finalOK -> <transition id="creditCardsPage.Cancel" targetState="finalOK"/> </transitions> </htmlState> <!- 信用卡确认信息页面,type="page"表示这个状态是页面, typeIdInfo="creditCardConfirmationPage
45、.jsp"表示页面内容 -> <htmlState id="creditCardConfirmationPage" type="page" typeIdInfo="creditCardConfirmationPage.jsp"> <transitions> <!- 如果用户确认了信用卡信息, 则转移到下一个流程状态creditCardProcessingOpState。 -> <transition id="creditCardConfirmationPage.OK&
46、quot; targetState="creditCardProcessingOpState"/> <!- 如果用户取消了信用卡申请,则转到流程的下一个状态finalOK -> <transition id="creditCardConfirmationPage.Cancel" targetState="finalOK"/> </transitions> </htmlState> <!- 信用卡处理逻辑状态 -> <htmlState id="credi
47、tCardProcessingOpState"> <entryActions> <!- 执行业务操作,operationName="creditCardProcessingOp"表示业务操作的ID -> <executeOperationAct id="creditCardProcAct" linkContextTo="processor" operationName="creditCardProcessingOp"/> </entryActions>
48、 <transitions> <!- 如果信用卡处理申请提交成功,则转移到下一个状态creditCardProcessedState。 -> <transition id="creditCardProcAct.ok" targetState="creditCardProcessedState"/> <!- 如果信用卡处理申请提交失败,则转移到下一个状态finalNotOK。 -> <transition id="creditCardProcAct.error" targetStat
49、e="finalNotOK"/> </transitions> </htmlState> <!- 信用卡处理完成页面。type="page"表示这个状态是页面, typeIdInfo="creditCardProcessedPage.jsp"表示页面内容 -> <htmlState id="creditCardProcessedState" type="page" typeIdInfo="creditCardProcessedPage.j
50、sp"> <transitions> <transition id="creditCardProcessedState.OK" targetState="finalOK"/> </transitions> </htmlState> <!- 申请错误页面。type="final"表示这个状态是流程的结束状态, finalPage="apologies.jsp"表示页面内容 -> <htmlState finalPage="ap
51、ologies.jsp" id="finalNotOK" type="final" typeIdInfo="notOK"/> <!- 申请成功页面。type="final"表示这个状态是流程的结束状态, finalPage="accountinquiry.jsp"表示页面内容 -> <htmlState finalPage="accountinquiry.jsp" id="finalOK" type="final
52、" typeIdInfo="OK"/></htmlProcessor>XUI 页面流程(XUI Flow Processor)XUI 页面流程是 Java 富客户端的页面流程,是 BTT 两种 Java 富客户端页面流程中的一种。 XUI 页面流程把一个交易中的所有 XML UI 页面、业务流程和业务操作组成一个流程,并且根据状态机进行业务的执行和页面的导航。通用页面流程中的 XUIProcessor 就是用于驱动 XUI 富客户端页面流程的。图 7. XUI 富客户端页面流程和流程之间的关系XUI 富客户端页面流程和 Web 页面流程一样,是异
53、步的,具有 XUI 页面状态(state),超时机制等。下面是同样的信用卡申请流程的 XUI 页面流程定义。我们可以看出,其原理和 Web 页面流程非常类似。清单 3. XUI 富客户端页面流程(XUI Flow Processor)实例<!- xuiProcessor表示XUI富客户端页面流流程, id唯一标示这个xui富客户端页面流程-><xuiProcessor context="creditCardsCtx" id="creditCardsProc"> <!- 开始状态,执行initialStep业务操作,并根据结果
54、导航到下一个状态-> <state id="initial" type="initial"> <entryActions> <Step id="initialStep" implClass="com.ibm.btt.rcp.sample.operation.step.InitialStep" /> </entryActions> <transitions> <transition id="initialStep.ok" ta
55、rgetState="creditCardsWellcome" /> <transition id="initialStep.error" targetState="finalNotOk" /> </transitions> </state> <!- 欢迎页面状态。type="page"表示是页面状态, typeIdInfo="jar:/xui/firstStep.xui"表示页面内容对应的XML。-> <xuiState id=&qu
56、ot;creditCardsWellcome" type="page" typeIdInfo="jar:/xui/firstStep.xui"> <!- 根据页面上出发的事件,转到下一个状态creditHistoryOpState。 页面上会使用StateChangeAction,发送"history"事件 -> <transitions> <transition context="creditCardsWellcome_history_Ctx" id="cr
57、editCardsWellcome.history" targetState="creditHistoryOpState" /> </transitions> </xuiState> <!- 业务状态,执行相应的业务操作, type="operation"表示这个状态是一个业务操作-> <state id="creditHistoryOpState" type="operation"> <entryActions> <!- 执行相应的
58、业务操作, operationName="creditHistoryOp" 表示要执行的业务操作的ID-> <executeOperationAct id="creditHistoryAct" linkContextTo="processor" operationName="creditHistoryOp" /> </entryActions> <!- 根据业务操作的返回结果,转移到XUI页面流程的下一个状态-> <transitions> <transi
59、tion id="creditHistoryAct.accountExists" targetState="creditCardsPage" /> <transition id="creditHistoryAct.newAccount" targetState="financialInfoState" /> <transition id="creditHistoryAct.error" targetState="finalNotOk" /> &l
60、t;/transitions> </state> <!- 子流程状态,这是一个特殊的页面状态-> <xuiState id="financialInfoState"> <entryActions> <!- executeXuiSubflowAct表示执行一个子页面流程, processor="financialInfoProc"表示子页面流程的ID, XUI富客户端页面流程会根据ID并且执行子页面流程-> <executeXuiSubflowAct id="initialS
61、tep" processor="financialInfoProc" /> </entryActions> <!- 根据子页面流程的结果,XUI富客户端页面流程执行下一个流程状态 -> <transitions> <transition id="initialStep.ok" outputMapFmt="financialInfoToCreditApplFormat" targetState="creditCardsPage" /> <trans
62、ition id="initialStep.notOK" outputMapFmt="errorMessagesMapper" targetState="finalNotOK" /> <transition id="initialStep.canceled" targetState="creditCardsWellcome" /> </transitions> </xuiState> <!- 选择信用卡类型页面状态,type="page&
63、quot;表示这个状态是页面, typeIdInfo="jar:/xui/chooseCard.xui"表示页面内容。-> <xuiState id="creditCardsPage" type="page" typeIdInfo="jar:/xui/chooseCard.xui"> <transitions> <!- 如果用户信用卡选择成功, 转到流程的下一个状态creditCardConfirmationPage -> <transition id="c
64、reditCardsPage.ok" targetState="creditCardConfirmationPage" /> <!- 如果用户取消了信用卡申请,则转到流程的下一个状态finalOK -> <transition id="creditCardsPage.cancel" targetState="creditCardsWellcome" /> </transitions> </xuiState> <!- 信用卡确认信息页面,type="page"表示这个状态是页面, typeIdInfo="jar:/xui/confirm.xui"表示页面内容 -> <xuiState id="creditCardConfirmationPage" type="page" typeIdInfo=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- QC/T 1217-2024车载有线高速媒体传输万兆全双工系统技术要求及试验方法
- 人民版道德与法治九年级上册第五课《小康家园》配套听课评课记录
- 人教新课标地理七年级上册《2.2 海陆的变迁》听课评课记录
- 湘教版地理七年级上册 第三章 第三节《世界的语言与宗教》听课评课记录
- 人教版数学八年级下册听评课记录:第20章复习课(二)
- 环评招募合伙协议书(2篇)
- 新版华东师大版八年级数学下册《16.1.1分式》听评课记录2
- 星球版地理八年级上册《第二节 众多的人口》听课评课记录1
- 五年级上册数学听评课记录《数学好玩-图形中的规律》(4)北师大版
- 苏科版数学八年级上册听评课记录《4-4近似数》
- 中国氢内燃机行业发展环境、市场运行格局及前景研究报告-智研咨询(2024版)
- 《自然保护区划分》课件
- 2025年普通卷钉项目可行性研究报告
- 2024年湖南高速铁路职业技术学院高职单招数学历年参考题库含答案解析
- 上海铁路局招聘笔试冲刺题2025
- 学校食堂餐厅管理者食堂安全考试题附答案
- 《商用车预见性巡航系统技术规范》
- 国旗班指挥刀训练动作要领
- 春季安全开学第一课
- 植物芳香油的提取 植物有效成分的提取教学课件
- 陕鼓集团招聘笔试题目
评论
0/150
提交评论