- 作者简介
- 内容提要
- 关于本书
- 路线图
- 代码规范与下载
- 作者在线
- 封面插图简介
- 前言
- 译者序
- 致谢
- 第1部分 Spring 的核心
- 第1章 Spring 之旅
- 第2章 装配 Bean
- 第3章 高级装配
- 第4章 面向切面的 Spring
- 第2部分 Web 中的 Spring
- 第5章 构建 Spring Web 应用程序
- 第6章 渲染 Web 视图
- 第7章 Spring MVC 的高级技术
- 第8章 使用 Spring Web Flow
- 第9章 保护 Web 应用
- 第3部分 后端中的 Spring
- 第10章 通过 Spring 和 JDBC 征服数据库
- 第11章 使用对象-关系映射持久化数据
- 第12章 使用 NoSQL 数据库
- 第13章 缓存数据
- 第14章 保护方法应用
- 第4部分 Spring 集成
- 第15章 使用远程服务
- 第16章 使用 Spring MVC 创建 REST API
- 第17章 Spring消息
- 第18章 使用 WebSocket 和 STOMP 实现消息功能
- 第19章 使用 Spring 发送 Email
- 第20章 使用 JMX 管理 Spring Bean
- 第21章 借助 Spring Boot 简化 Spring 开发
8.3.4 支付
吃免费披萨这事儿并不常见。如果Spizza披萨店让他们的顾客不提供支付信息就订购披萨的话,估计他们也维持不了多久。在披萨流程要结束的时候,最后的子流程提示用户输入他们的支付信息。这个简单的流程如图8.5所示。
图8.5 订购披萨的最后一步是通过支付子
流程让用户进行支付
像订单子流程一样,支付子流程也使用<input>元素接收一个Order对象作为输入。
你可以看到,进入支付子流程的时候,用户会到达takePayment状态。这是一个视图状态,在这里用户可以选择使用信用卡、支票或现金进行支付。提交支付信息后,将进入verifyPayment状态。这是一个行为状态,它将校验支付信息是否可以接受。
使用XML定义的支付流程如下所示:
程序清单8.10 支付子流程有一个视图状态和一个行为状态
在流程进入takePayment视图时,<on-entry>元素将构建一个支付表单并使用SpEL表达式在流程作用域内创建一个PaymentDetails实例,这是支撑表单的对象。它也会创建视图作用域的paymentTypeList变量,这个变量是一个列表包含了PaymentType枚举(如程序清单8.11所示)的值。在这里,SpEL的T()操作用于获得PaymentType类,这样就可以调用静态的asList()方法。
程序清单8.11 PaymentType枚举定义了用户可用的支付选项
在面对支付表单的时候,用户可能提交支付也可能会取消。根据做出的选择,支付子流程将以名为paymentTaken或cancel的<end-state>结束。就像其他的子流程一样,不论哪种<end-state>都会结束子流程并将控制交给主流程。但是所采用<end-state>的id将决定主流程中接下来的转移。
现在,我们已经依次介绍了披萨流程及其子流程,并看到了Spring Web Flow的很多功能。在我们结束Spring Web Flow话题之前,让我们快速了解一下如何对流程及其状态的访问增加安全保护。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论