笔记38 Spring Web Flow——订单流程(定义基本流程)
做一个在线的披萨订购应用
实际上,订购披萨的过程可以很好地定义在一个流程中。我们首先从 构建一个高层次的流程开始,它定义了订购披萨的整体过程。接下 来,我们会将这个流程拆分成子流程,这些子流程在较低的层次定义 了细节。
一、定义基本流程
当顾客访问Spizza站点时,他们需要进行用户识别,选择一个 或更多披萨添加到订单中,提供支付信息然后提交订单。

订购披萨的整个流程很简单且是线性的。
1.使用Spring Web Flow的XML流程定义来实现披萨订单的整体流程。
pizza-flow.xml
<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/webflow
http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd"> <var name="order" class="com.springinaction.pizza.domain.Order"/> <!-- Customer -->
<subflow-state id="customer" subflow="pizza/customer">
<input name="order" value="order"/>
<transition on="customerReady" to="order" />
</subflow-state> <!-- Order -->
<subflow-state id="order" subflow="pizza/order">
<input name="order" value="order"/>
<transition on="orderCreated" to="payment" />
</subflow-state> <!-- Payment -->
<subflow-state id="payment" subflow="pizza/payment">
<input name="order" value="order"/>
<transition on="paymentTaken" to="saveOrder"/>
</subflow-state> <action-state id="saveOrder">
<evaluate expression="pizzaFlowActions.saveOrder(order)" />
<transition to="thankYou" />
</action-state> <view-state id="thankYou">
<transition to="endState" />
</view-state> <!-- End state -->
<end-state id="endState" /> <global-transitions>
<transition on="cancel" to="endState" />
</global-transitions>
</flow>
在流程定义中,第一件事就是order变量的声明。每次流程开始的时候,都会创建一个order实例。order类会带有关于订单的所有信息,包含顾客信息、订购的披萨列表以及支付详情。
2. order带有披萨订单的所有细节信息
package com.springinaction.pizza.domain; import java.io.Serializable;
import java.util.ArrayList;
import java.util.List; public class Order implements Serializable {
private static final long serialVersionUID = 1L;
private Customer customer;
private List<Pizza> pizzas;
private Payment payment; public Order() {
pizzas = new ArrayList<Pizza>();
customer = new Customer();
} public Customer getCustomer() {
return customer;
} public void setCustomer(Customer customer) {
this.customer = customer;
} public List<Pizza> getPizzas() {
return pizzas;
} public void setPizzas(List<Pizza> pizzas) {
this.pizzas = pizzas;
} public Payment getPayment() {
return payment;
} public void setPayment(Payment payment) {
this.payment = payment;
}
}
流程定义的主要组成部分是流程的状态。默认情况下,流程定义文件 中的第一个状态也会是流程访问中的第一个状态。在本例中,也就 是identifyCustomer状态(一个子流程)。但是如果你愿意的 话,你可以通过<flow>元素的start-state属性将任意状态指定 为开始状态。
识别顾客、构造披萨订单以及支付这样的活动太复杂了,并不适合将 其强行塞入一个状态,应该单独定义为流程。但是为了更好地整体了解披萨流程,这些活动都是以 <subflow-state>元素来进行展现的。
流程变量order将在前三个状态中进行填充并在第四个状态中进行保 存。identifyCustomer子流程状态使用了<output>元素来填 充order的customer属性,将其设置为顾客子流程收到的输 出。buildOrder和takePayment状态使用了不同的方式,它们使 用<input>将order流程变量作为输入,这些子流程就能在其内部 填充order对象。
在订单得到顾客、一些披萨以及支付细节后,就可以对其进行保存 了。saveOrder是处理这个任务的行为状态。它使用<evaluate> 来调用ID为pizzaFlowActions的bean的saveOrder()方法,并将 保存的订单对象传递进来。订单完成保存后,它会转移 到thankCustomer。
3.感谢页面(thankCustomer.jsp)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'thankCustomer.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<h2>Thank you for your order!</h2>
<a href="${flowExecutionUrl}&_eventId=finished">Finish</a>
</body>
</html>
在感谢页面中,会感谢顾客的订购并为其提供一个完成流程的连接。Spring Web Flow为视图的用户提供了一个flowExecutionUrl变 量,它包含了流程的URL。结束链接将一个“_eventId”参数关联到 URL上,以便回到Web流程时触发finished事件。这个事件将会让 流程到达结束状态。流程将会在结束状态完成。鉴于在流程结束后没有下一步做什么的具 体信息,流程将会重新从identifyCustomer状态开始,以准备接 受另一个披萨订单。
目前还缺少的子流程:identifyCustomer、buildOrder、takePayment。
笔记38 Spring Web Flow——订单流程(定义基本流程)的更多相关文章
- 笔记39 Spring Web Flow——订单流程(收集顾客信息)
如果你曾经订购过披萨,你可能会知道流程.他们首先会询问你的电 话号码.电话号码除了能够让送货司机在找不到你家的时候打电话给 你,还可以作为你在这个披萨店的标识.如果你是回头客,他们可以 使用这个电话号 ...
- 笔记40 Spring Web Flow——订单流程(构建订单)
二.订单子流程 在识别完顾客之后,主流程的下一件事情就是确定他们想要什么类型 的披萨.订单子流程就是用于提示用户创建披萨并将其放入订单中 的,如下图所示. showOrder状态位于订单子流程的中心位 ...
- Spring实战第八章学习笔记————使用Spring Web Flow
Spring实战第八章学习笔记----使用Spring Web Flow Spring Web Flow是一个Web框架,它适用于元素按规定流程运行的程序. 其实我们可以使用任何WEB框架写流程化的应 ...
- 笔记37 Spring Web Flow——流程的组件
在Spring Web Flow中,流程是由三个主要元素定义的:状态.转移和 流程数据. 一.状态 Spring Web Flow定义了五种不同类型的状态.通过选择Spring Web Flow的状态 ...
- 笔记42 Spring Web Flow——Demo(2)
转自:https://www.cnblogs.com/lyj-gyq/p/9117339.html 为了更好的理解披萨订购应用,再做一个小的Demo. 一.Spring Web Flow 2.0新特性 ...
- 笔记43 Spring Web Flow——订购披萨应用详解
一.项目的目录结构 二.订购流程总体设计 三.订购流程的详细设计 1.定义基本流程pizza-flow.xml <?xml version="1.0" encoding=&q ...
- 笔记36 Spring Web Flow——配置
Spring Web Flow是一个Web框架,它适用于元素按规定流程运行的程序.Spring Web Flow是Spring MVC的扩展,它支持开发基于流程的应用程 序.它将流程的定义与实现流程行 ...
- 笔记41 Spring Web Flow——Demo
订购披萨的应用整体比较比较复杂,现拿出其中一个简化版的流程:即用户访问首页,然后输入电话号(假定未注册)后跳转到注册页面,注册完成后跳转到配送区域检查页面,最后再跳转回首页.通过这个简单的Demo用来 ...
- Spring Web Flow 简介
Spring Web Flow 简介 博客分类: 转载 SSH 最近在TSS上看到了一片介绍Spring Web Flow的文章,顺便就翻译了下来,SWF的正式版估计要到6月份才能看到了,目前的例子都 ...
随机推荐
- shiro安全框架的使用流程
最近学了shiro安全框架流程,在这里梳理一下shiro的工作流程和一些代码,方便以后使用的时候,能快速找到对应的代码. 要使用这个shiro框架,还要新建两张表 t_authority(权限表)和t ...
- Django rest_framework 频率控制组件
频率控制 一.频率控制实现一 from rest_framework.views import APIView from rest_framework.response import Response ...
- 安装python及编辑工具PyCharm
win10下安装python环境,安装编辑工具PyCharm 1.安装 pythonpython安装包下载地址https://www.python.org/ftp/python/3.8.0/pytho ...
- SSD网络结构
SSD算法,其英文全名是Single Shot MultiBox Detector. SSD的网络结构流程如下图所示:SSD总共11个block,相比较于之前的VGG16,改变了第5个block的第4 ...
- js-打印九九乘法表
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- putty字体和颜色修改
来源:https://www.igvita.com/2008/04/14/custom-putty-color-themes/ 网站上有putty的注册表,可以修改putty显示的配色方案. 非常棒!
- Luogu P1738 洛谷的文件夹
P1738 Luogu 发一个链表题解! 仅有24ms,排名第一哦~ 圆圈代表点,每个店有两个指针,一个指向自己兄弟(同级文件夹),另一个指向自己孩子(子文件夹),还有一个保存当前名字. 有点像二叉树 ...
- 表格排序tablesort小案列
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- SQL生成 C# Model
本文转自: https://www.cnblogs.com/jhli/p/11552105.html declare @TableName sysname = 'T_FakeOrderList' de ...
- 18、webservice使用
1.将axis2.war文件拷到tomcat,webapp文件夹下,然后重启tomcat 访问