Spring 实战-第八章-使用Spring Web Flow

Spring Web Flow 是 Spring 的一个子项目,其最主要的目的是解决跨越多个请求的、用户与服务器之间的、有状态交互问题,比较适合任何比较复杂的、有状态的、需要在多个页面之间跳转的业务过程。

配置SWF需要

  • 装配流程执行器(flow executor)

执行器驱动流程的执行,当用户进入流程时,流程执行器会为用户创建并启动一个流程执行实例,当流程暂停的时候(如为用户展示视图时),流程执行器会在用户执行操作后恢复流程。

 

    <!--Execute flows:the entry point into the Spring Web Flow system-->
    <flow:flow-executor id="flowExecutor"/>

    <!--Dispatches requests mapped to flows to FlowHandler implementations-->
    <bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
        <property name="flowExecutor" ref="flowExecutor"/>
    </bean>

 

  • 配置流程注册表

流程注册表的工作室加载流程定义并让流程执行器能够使用它们。

 

    <!--The reigistry of executable flow definitions-->
    <flow:flow-registry id="flowRegistry" base-path="/WEB-INF/flows">
        <flow:flow-location-pattern value="/**/*-flow.xml"/>
    </flow:flow-registry>

 

  • 处理流程请求

DispatcherServlet会将请求分发给控制器,SWF中需要一个FlowHandlerMapping来帮助DispatcherServlet将流程请求发送给SWF。

    <!--Maps request paths to flows in the flowRegistry-->
    <bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
        <property name="flowRegistry" ref="flowRegistry"/>
    </bean>

 

FlowHandlerMapping装配了流程注册表的引用,这样就知道如何将请求的URL匹配到流程上。比如请求"/pizza",就会找WEB-INF/pizza目录下的流程。

 

在Spring Web Flow 中,流程是由三个主要元素定义的:状态、转义和流程数据。

  • 状态(State)是流程中时间发生的地点。
状态类型  功能标签
行为(Action)行为状态是流程逻辑发生的地方<action-state>
决策(Decision)决策状态将流程分成两个方向,它会基于流程数据的评估结果确定流程方向<decision-state>
结束(End)  结束状态是流程的最后一站,一旦进入End状态,流程就会终止<end-state>
子流程(Subflow)子流程状态会在当前正在运行的流程上线文中启动一个新的流程<subflow-state>
视图(View)视图状态会暂停流程并邀请用户参与流程<view-state>

 

 

 

 

 

Spring Web Flow 定义了 5 个切入点,通过 flow 定义文件的配置,可在这 5 个切入点插入相关业务逻辑代码。

 

 

 

 

 

<view-state id="viewCart" view="viewCart" >
  <on-render>
    <evaluate expression="productService.getProducts()"
      result="viewScope.products"/>
  </on-render>
</view-state>

 

  • 转移(transition)是流程的连接不同状态的动作。
<transition on="cancel" to="cancel"/>

 

属性to用于指定流程的下一个状态,属性on指定触发转移的事件。

转移连接了流程中的状态,除了结束状态之外的每个状态,至少都需要一个转移。状态可以有多个转移,分别对应于当前状态结束时可以执行的不同路径。

此外,还可以定义全局转移,使的流程中的所有状态都会默认用于某个转移。

    <global-transitions>
        <transition on="cancel" to="endState"/>
    </global-transitions>

 

 

  • 流程数据

流程数据保存在变量中,而变量可以在流程的各个地方进行引用。可以使用

  • <var>:最简单的形式,作用域为整个流程
  • <evaluate>:计算了一个表达式并将结果放到了变量中
<evaluate expression="pizzaFlowActions.lookupCustomer(requestParameters.phoneNumber)"  result="order.customer"/>

 

  • <set>:与<evaluate>类似,都是将变量设置为表达式。

Spring Web Flow 定义了五种不同的作用域:

范围生命作用域和可见性
Conversion

最高层级的流程开始时创建,在最高层级的力促恒结束时销毁。被最高层级的流程和其所有的子流程所共享。

Flow当流程开始时创建,在流程结束时销毁。只有在创建它的流程中是可见的。
Request当一个请求进入流程时创建,在流程返回时销毁
Flash当流程开始时创建,在流程结束时销毁。在视图状态渲染后,它也会被清除。
View当进入视图状态时创建,当这个状态退出时销毁。只在视图状态内是可见的。

 

 

 

 

 

1

 

sourceCode:https://github.com/ljw8947/SpringInAction/tree/master/Capter8/Spizza

 

转载于:https://www.cnblogs.com/lvjianwei/p/7943604.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
英文版:The Definitive Guide to Spring Web Flow 内容简介 《Spring Web Flow权威指南》介绍了Spring Web Flow的构建系统Spring Jumpstart、Spring Web Flow架构和基础知识,并结合示例讲述了Spring Web Flow的高级概念、流执行管理和驱动,同时说明了如何测试流。 《Spring Web Flow权威指南》适合各层次Java Web开发人员阅读和参考。 编辑推荐 《Spring Web Flow权威指南》:Spring Web Flow创始人著作、体验全新的Web用户界面开发方式、深入剖析开源框架的设计与实现。 Spring Web Flow是著名的Spring框架的子项目。它解决了困扰Web应用程序开发人员的3个主要问题.即用户界面导航的控制、状态管理和模块化,极大地提高了生产效率,尤其适合需要复杂用户交互界面的Web应用程序。此外,它还借鉴了UML状态图思想的流定义方式,使得Web流的开发更加自然。 书中重点讲解Web流、流定义语言、流执行、流的测试以及自定义扩展等精髓内容,并结合使用Spring WebFlow 1开发的实例来向读者说明如何将其实际应用到项目中。尤其弥足珍贵的是,作者从框架设计者角度深入阐述了Spring Web Flow的设计思想和实现方式。更能让读者掌握其核心本质。此外,书中还清楚地讲述了SpringWeb Flow 1和Spring Web Flow 2在设计和使用上的差异。 《Spring Web Flow权威指南》适合各层次Java Web开发人员阅读和使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值