zoukankan      html  css  js  c++  java
  • Spring Web Flow 学习笔记(2)-流程的组件

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

    状态是流程中事件发生的地点,类似公路旅行中停下来的地点,转移就类似与连接这些地点的公路

    2.状态

      Spring Web Flow 定义了5种不同类型的状态:

    状态类型 作用
    行为(Action) 是流程逻辑发生的地方
    决策(Decision) 将流程分成两个方向,它会基于流程数据的评估结果确定流程的方向
    结束(End) 是流程的最后一站,一旦进入End状态,流程就会结束    
    子流程(Subflow) 会在当前的正在进行的流程上下文中启动一个新的流程
    视图(View) 会暂停流程并邀请 用户参与流程

      (1)视图状态

        视图状态用来为用户展示信息并使用户在流程中发挥作用,实际的视图实现可以是Spring支持的任意类型的视图,但通常是用JSP来实现的。在流程定义的XML文件中,<view-state>用户定义视图状态

    <view-state id="welcome" />

       其中id有两个含义,一是在流程内标示这个状态,二是指定了流程到这个状态时要展示的逻辑视图的名称,如果要显示的指定另外一个视图,可以如下:

    <view-state id="welcome" view="greeting"/>
    

      如果流程为用户展示了一个表单,可能需要指明表单所绑定的对象,可以如下:

    <view-state id="takePayment" model="flowScope.paymentDetails"/>

     (2)行为状态

      是应用程序自身在执行任务,在在流程定义的XML文件中,行为状态使用<action-state>元素来声明,示例如下:

    <action-state id="saveOrder">
            <evaluate expression="pizzaFlowActions.saveOder(order)"/>
            <transition to="thankYou"/>
    </action-state>
    

      <evaluate>元素给出行为状态要做的事情,expression属性指定了进入这个状态是要评估的表达式

     (3)决策状态

       决策状态能够使在流程执行时产生两个分支,决策将评估一个Boolean类型的表达式,然后在两个状态中选择一个。示例如下:

    <decision-state id="checkDeliveryArea">
      <if test="pizzaFlowActions.checkDeliveryArea(customer.zipCode)"
          then "addCustomer"
          else "deliveryWarning"/>
    </decision-state>    
    

      (4)子流程状态

        在一个正在执行的流程中调用另一个流程,示例如下:

    <subflow-state id="order" subflow"pizza/order">
     <input name="order" value="order"/>
      <transition on="orderCreated" to="payment"/>
    </subflow-state>
    

      (5)结束状态

       指定了流程的结束,示例如下:

    <end-state id="customerReady"/>
    

    3.转移,全局转移

      转移连接了流程中的状态,流程中除了结束状态外,至少需要有一个转移,这样就能够一旦这个流程执行完成时要去向哪里。

      转移需使用<transition> 元素来进行定义,它会作为各个状态的子元素,示例如下:

    <transition to="customerReady"/>
    

      属性to用来指定流程的下一个状态,只使用to属性,那么这个转移就会是当前状态的默认转移选项。还可以使用on属性来指定触发转移的事件。

    <transition on ="phoneEntered" to="lookupCustomer"/>
    

     多个状态中重复通用的转移,可以把它定义为全局转移,这样流程中所有的状态都会默认拥有这个全局转移,示例如下:

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

    4.流程数据

    (1)定义变量

    (2)定义流程数据的作用域

  • 相关阅读:
    关于 控制反转与依赖注入 对初学者的一点帮助
    转载--文章(感谢米粒儿博主分享) 关于 Json.net序列化时间问题
    转载--文章(感谢陈晨博主分享) 关于 Json.net
    B-JUI框架使用探究
    什么是Entity Framework(ORM)
    字典
    Docker部署Linux+Nginx+Mariadb+PHP环境
    Docker部署Django+nginx+uwsgi环境
    Docker部署Django+apache+mod_wsgi环境
    Docker容器技术
  • 原文地址:https://www.cnblogs.com/zcs201093189/p/4734565.html
Copyright © 2011-2022 走看看