Spring WebFlow(二)
来源:互联网 发布:c语言switch语句例子 编辑:程序博客网 时间:2024/06/14 17:35
流程组件中主要为三种:状态、转移、流程数据。三者是流程不可或缺的要素。
流程中事件发生的地点,业务逻辑执行,做出决策或者将页面展示给用户。
1、视图
为用户展现信息并使用户在流程中发挥作用。实际的视图实现可以是Spring支持的任意视图类型,但通常是用JSP来实现的。
让一个节点显示的视图,使用view属性
<view-state id="step1" view="views/step1.jsp" >
让流程中节点为用户展示表单,需要使用model属性
<varname="person" class="net.tjeerd.springwebflowwizard.model.Person"/>
<view-state id="step1" view="views/step1.jsp" model="person">
2、行为
行为状态一般会触发Spring所管理Bean的一些方法,并跟你讲方法调用的执行结果转移到另一个状态。
<action-state>元素一般都有一个<evaluate>子元素,该元素给出了行为状态要做的事情,expression属性指定了进入这个状态时要评估的表达式。本例中,给出的是SpEL表达式,这表明它将会找到ID为pizzaFlowActions的Bean,并调用其saveOrder()方法
<action-state id="saveOrder">
<evaluate expression="pizzaFlowActions.saveOrder(order)" />
<transition to="thankYou" />
</action-state>
还有一种定义行为的方式,参考如下
<action-state id="reversePlace">
<set name="person" value="wizardFlowActions.reversePlace(person)"/>
<transition to="step5"/>
</action-state>
3、决策
在流程执行时产生两个分支,它会评估一个Boolean表达式,根据结果是true还是false在两个状态转移中选择一个进入。
在流程定义文件中,使用<decision-state>元素来定义决策状态
<decision-state id="checkDeliveryArea">
<if test="pizzaFlowActions.checkDeliveryArea(customer.zipCode)"
then="addCustomer"
else="deliveryWarning" />
</decision-state>
4、子流程
流程逻辑可能要分散到多个类、方法等其他结构中。同样的,将流程分成独立的部分也是个不错的主意。<subflow-state>元素允许在一个正在执行的流程中调用另一个流程。
<subflow-state id="order" subflow="pizza/order">
<input name="order" value="order"/>
<transition on="orderCreated" to="payment" />
</subflow-state>
<input>元素作为子流程的输入被用于传递订单对象。
5、结束
流程执行的终点,当流程到达<end-state>时,流程就会结束。接下来发生什么要取决于以下几个因素:
1、 如果结束的流程是个子流程
那么调用它的流程将会从<subflow-state>处继续执行。<end-state>的ID将会用作事件触发从<subflow-state>开始的转移。
2、 如果<end-state>设置了view属性,那么就会渲染指定的视图。
视图可以是相对于流程的路径,也可以是流程模板:
使用externalRedirect:前缀的会重定向到流程外部的页面
使用flowRedirect:前缀的则会重定向到另外一个流程
3、 如果结束的流程不是子流程也没有配置view属性,那么这个流程就会结束。
在状态完成时指定流程的走向。
通过<transition>元素来定义,作为其他状态元素(<action-state>、<view-state>和<subflow-state>)的子元素。最简单的形式就是<transition>元素在流程中指定下一个状态:
<action-state id="reversePlace">
<set name="person" value="wizardFlowActions.reversePlace(person)"/>
<transition to="step5"/>
</action-state>
1、基于事件的触发来进行的
1、在视图状态,事件通常会是用户采取的动作。
2、在行为状态,事件是评估表达式得到的结果。
3、在子流程状态,事件取决于子流程结束状态的ID。
在节点执行中,可以使用on属性来指定触发转移的事件:
<view-state id="step4" view="views/step4.jsp" model="person">
<attribute name="description" value="Fourth step"/>
<transition on="submitNext" to="reversePlace" bind="true"/>
<transition on="submitPrevious" to="step3" bind="false"/>
</view-state>
2、有异常抛出,处理转移
<transition on-exception="com.springinaction.pizza.service.CustomerNotFoundException"
to="registrationForm" />
3、全局转移
如果整个流程都需要一个转移,我们就可以定义一个全局的转移
<global-transitions>
<transition on="submitCancel" to="cancel" bind="false" />
<transition on-exception="java.lang.Exception" to="exception"/>
</global-transitions>
配置了异常全局转移,无论哪个节点发生异常,都将转移到exception
1、声明变量
流程数据是保存在变量中的,而变量可以在流程的任意位置进行引用,并且可以以多种方式进行创建.
<var>创建变量
<!-- 这个变量可以在流程的任意状态下进行访问使用 -->
<var name="person" class="net.tjeerd.springwebflowwizard.model.Person"/>
<var name="exception" class="java.lang.Exception"/>
这个变量可以在流程的任意状态下进行访问使用。
<evaluate>创建变量
<evaluate result="viewScope.toppingsList"
expression="T(com.springinaction.pizza.domain.Topping).asList()" />
将结果放到toppingsList变量中,这个变量是视图作用域的。
<set>创建变量
<!-- 流程逻辑处理节点 -->
<action-state id="reversePlace">
<set name="person" value="wizardFlowActions.reversePlace(person)"/>
<transition to="step5"/>
</action-state>
2数据作用域
流程中所携带的数据都有其各自的生命周期,这取决于保存数据的变量本身的作用域。
使用<var>元素声明变量时,变量始终是流程作用域的,也就是在流程作用域内定义变量。使用<set>或<evaluate>时,作用域通过name或result属性的前缀指定。
总结:
它解决了困扰Web应用程序开发人员的3个主要问题.即用户界面导航的控制、状态管理和模块化,极大地提高了生效率,尤其适合需要复杂用户交互界面的Web应用程序
- Spring WebFlow(二)
- Spring WebFlow(一)
- Spring WebFlow(一)
- Spring webflow
- Spring-WebFlow(SWF)1.0rc感想
- spring webflow getting start
- spring webflow 学习小结
- 第三篇:spring webflow
- Spring 学习笔记(六)——WebFlow
- ***使用spring webflow遇到的问题-2***
- 使用spring webflow遇到的问题-3
- spring webflow : 上传单个文件实例
- Spring webflow:上传多个文件
- Java后台框架篇--Spring之WebFlow
- sso cas4.0改造历程--spring-webflow篇
- 使用spring webflow,在前台页面中如何显示后端返回的错误信息
- Spring(二、Spring IOC)
- cas 系统范例 服务端配置(三) 自定义登录 不使用webFlow
- BigInteger类,BigDecimal类,超大数字的运算与精度
- 《Angular2项目之目录结构》
- JS变动事件
- 软件测试管理
- centos7下安装配置javaweb环境
- Spring WebFlow(二)
- 归并排序(二)
- 学习所感 优先级
- Vue 百度搜索
- 算法提高 学霸的迷宫
- Maven的POM.xml详解(一)
- NFS文件共享解决tomcat集群文件上传。
- 关于在windows下启动zkServer.cmd闪退的解决办法
- 归并排序算法-C++