zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    二十三、DBMS_METADATA(提供提取数据库对象的完整定义的接口)
    二十二、utl_inaddr(用于取得局域网或Internet环境中的主机名和IP地址)
    二十一、utl_file(用于读写OS文件)
    二十、dbms_stats(用于搜集,查看,修改数据库对象的优化统计信息)
    十九、dbms_resource_manager(用于维护资源计划,资源使用组和资源计划指令)
    十八、dbms_repair(用于检测,修复在表和索引上的损坏数据块)
    十七、dbms_tts(检查表空间集合是否是自包含)
    十六、dbms_space_admin(提供了局部管理表空间的功能)
    十五、dbms_space(分析段增长和空间的需求)
    vuex—actions
  • 原文地址:https://www.cnblogs.com/lvjianwei/p/7943604.html
Copyright © 2011-2022 走看看