使用Spring Web Flow--概念学习

本文详细介绍了如何在Spring中配置WebFlow,包括设置XML命名空间、装配流程执行器和流程注册表。讲解了FlowHandlerMapping和FlowHandlerAdapter的角色,并概述了流程的三大要素:状态(如Action、Decision、End、Subflow和View)、转移和流程数据。还探讨了状态之间的转移规则、异常处理以及流程数据的作用域。
摘要由CSDN通过智能技术生成

概述:

觉得学一个东西首先大概跑通一个demo,有很多不懂,没有关系,接下来学习概念,你就会明白为什么会这么做?这就是带个问题学习、上一节模仿别人写的demo,大概了解流程

8.1 在Spring中配置Web Flow

增加xml中web FLow 命名空间

xmlns:flow="http://www.springframework.org/schema/webflow-config"

http://www.springframework.org/schema/webflow-config

http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.3.xsd

8.1.1 装配流程执行器(CEO)

<flow:flow-executor id="flowExecutor" />

8.1.2 配置流程注册表(部门经理)flow registry

<flow:flow-registry id="flowRegistry" base-path="WEB-INF/flows">

<flow:flow-location-pattern value="*-flow.xml"/>

</flow:flow-registry>

<flow:flow-registry id="flowRegistry">

<flow-location path="/WEB-INF/flows/springpizza.xml" />

</flow:flow-registry>

总结:

1、flow-location-pattern 表示利用正则表达式匹配,而flow-location是具体的地址

转存失败重新上传取消

8.1.3 处理流程请求

请求过来-->DispatcherServlet ->FlowHandlerMapping->FlowHandlerAdapter 

上面FlowHandlerMapping 类似 ResultMapping,路径映射

FlowHandlerAdapter 类似具体控制器

<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">

<property name="flowRegistry" ref="flowRegistry" />

</bean>

<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">

<property name="flowExecutor" ref="flowExecutor"/>

</bean>

8.2 流程组件

状态、转移和流程数据

8.2.1 状态

Action(行为)  : 行为状态是流程逻辑发生的地方

Decision(决策): 决策状态将流程分成两个方向,类似if

End(结束) 结束状态是流程的最后一站,一旦进入End状态,流程就会终止

Subflow(子流程) 子流程状态会在当前正在运行的流程上下文启动一个新的流程

视图(View) 视图状态会暂停流程并邀请用户参与流程,其实就是显示jsp网页

视图状态: <view-state id="welcome"/>

<view-state id="welcome"/> 如果没有view,默认view为welcome,当然也可以显式指定 ,如果展示数据可以用model属性

行为状态:<action-state>

<action-state id="saveOrder">

<evaluate expression="pizzaFlowActions.saveOrder(order)" />

<transition to="thankYou"/>

</action-state>

<evaluate >一般是调用具体类实现默认验证。expression=SpEL表达式

决策状态

<decision-state id="checkDeliveryArea">

<if test="pizzaFlowActions.checkDeliveryArea(customer.zipCode)"

then="addCustomer"

else="deliveryWarning" />

</decision-state>

子流程状态: <subflow-state>

<subflow-state id="order" subflow="pizza/order">\

<input name="order" value="order"/>

<transition on="orderCreated" to="payment"/>

</subflow-state>

结束状态: <end-state>

<end-state id="customerReady"/>

"externalRedirect" : 流程之外的视图

“flowRedirect:” 重定向另个流程中

8.2.2 转移(各个状态之间的交互)<transition>

例如:<transition on="phoneEntered" to="customerReady" />  to:表示转移目标, on:表示动作触发

异常转移:

<transition

on-exception="com.springinaction.pizza.service.CustomerNotFoundException"  to="registrationForm" />

全局转移:(整个流程终止)

<transition on="cancel" to="endState"/>  变成

<global-transitions>

<transition on="cancel" to="endState"/>

</global-transitions>

所有状态都会默认拥有这个cancel转移

8.2.3 流程数据

声明变量

<var name="customer" class="com.springinaction.pizza.domain.Customer"/>

视图作用域

<evaluate result="viewScope.toppingsList"

expression="T(com.springinaction.pizza.domain.Topping).asList()"

<set name="flowScope.pizza" 

value="new com.springinaction.pizza.domain.pizza()"/>

定义流程数据的作用域;
Conversation: 最高层级作用域

Flow: 创建它流程可见

Request: 当一个请求进入流程时创建

Flash:与Flow类似,当流程开始创建,在流程结束时销毁

View: 当进入视图状态时创建,当这个状态退出时销毁,只在视图状态内是可见的

当使用<var>元素声明变量时,变量始终是流程作用域的,也就是在定义变量的流程内有效。当使用<set>或<evaluate>的时候,作用域通过name或result属性的前缀指定。

总结:流程的三要素就是:状态、转移、流程数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

apple_51426592

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值