需要指出的是,不管设成 /shopping.do 还是设成 /shopping ,或者 /shopping.htm ,效果都是一样的, flowController 都会去找 id 为 shopping的flow来执行。
1.5 FlowBuilder Services
flow-builder-services 属性的配置指明了在这个 flow-registry “仓库”里的 flow 的一些基本特性,例如,是用 Unified EL 还是 OGNL 、 model (模型)对象中的数据在显示之前是否需要先作转换,等等。在本示例中,我们需要在 flow-builder-services 属性中指明 Spring Web Flow 中所用到的 view ,由 Spring Web MVC 的“ View Resolver ”来查找,由 Spring Web MVC 的“ View Class”来解析,最后呈现给用户。
所有这些配置的目的无非是两个:一是要让客户端的请求转变成 flow 的执行,二是要让 flow 执行过程中、或执行结束后得到的视图能返还给客户端。
2 Spring Web Flow的组件
Spring Web Flow中,流程是由3个主要元素定义的:状态、转移和流程数据。
2.1 状态
Spring Web Flow定义了5种不同类型的状态(state)——行为、决策、结束、子流程和视图状态。
除了结束状态外,其他状态都可以转换到别的状态,一般通过在状态中定义转移(transition) 来实现到其他状态的转换,转换的发生一般由事件(event)来触发。
2.1.1 视图状态
视图状态用来为用户展现信息并是用户参与流程。实际的视图可以是任意类型,但通常是用JSP来实现。
在流程XML文件中,使用
View Code
2.1.2 行为状态
行为状态是程序自身在执行任务,一般情况下会触发Spring管理的Bean的一些方法并根据方法的返回结果转移到另一个状态。
在流程XML文件中,使用
View Code
2.1.3 决策状态
决策状态能够在流程执行时产生两个分支。判断一个Boolean类型的表达式,然后在两个状态中选择一个。
在流程XML文件中,使用
View Code
2.1.4 子流程状态
子流程状态用于在一个正在运行的流程中调用另一个流程。
在流程XML文件中,使用
View Code
2.1.5 结束状态
结束状态用于结束一个流程。
在流程XML文件中,使用
View Code
如果结束的是一个子流程,那么流程将会从父流程的
如果
如果结束的流程既不是子流程也没有指定view属性,那这个流程只是会结束,浏览器将会加载流程的基本URL地址,开始一个新的流程实例。
2.2 转移
流程中除了结束状态,其余的每个状态至少需要有一个转移,这样才能够知道一旦这个状态完成时流程要去向哪里。状态也可以有多个转移。
转移使用
属性to用于指定流程的下一个状态。
属性on用于指定触发转移的事件。(还有一个on-exception属性本例中没有给出,它用于指定触发转移的异常)
当多个状态使用了同一个转移时,可以设置一个全局转移来简化代码。
定义完这个全局转移后,流程中所有的状态都会默认拥有这个cancelShopping转移。
2.3 流程数据
流程状态在转移的过程中可能会需要“捎带”一些数据,这些数据就是流程数据,流程数据存放在变量中,变量能以多种形式创建,并且可以设置作用域。
2.3.1 声明变量
在流程中创建变量的最简单形式是使用元素:
上面代码创建了一个Cart实例并放到了名为mycart的变量中。
使用
2.3.2 定义流程数据的作用域
Spring Web Flow定义了5种作用域,如下表:
范围
作用域和可见性
Conversation
在最高层的流程开始时创建,在最高层的流程结束时销毁。被最高层的流程和其所有的子流程共享
Flow
当流程开始时创建,在流程结束时销毁。只有在创建它的流程中是可见的
Request
当一个请求进入流程时创建,在流程返回时销毁
Flash
当流程开始时创建,在流程结束时销毁。在视图状态渲染后,它也会被清除
View
当进入视图状态时创建,当这个状态退出时销毁。只在视图状态内是可见的
当使用元素声明变量时,变量始终是Flow作用域的,也就是在Flow作用域内定义变量。当使用
参考:
http://www.cnblogs.com/xwdreamer/archive/2011/11/10/2296939.html
http://blog.csdn.net/hejingyuan6/article/details/46508821
转载请注明出处