返回介绍

8.3.4 支付

发布于 2024-08-17 00:45:50 字数 1393 浏览 0 评论 0 收藏 0

吃免费披萨这事儿并不常见。如果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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文