将 Spring Web-flow 与 Spring MVC 集成的原因

Reason to integrate Spring Web-flow with Spring MVC

为什么(在什么情况下)我们需要将 Spring Webflow 与 Spring MVC 集成?这两个框架都用于创建 Web 应用程序,我看不出我们为什么要集成它们。如果有人能澄清一下,我将不胜感激。

如果你的应用程序有复杂的流页面,需要定义为有限状态机的事件然后使用Webflow。在您购买保险、机票的网站上使用 webflow 是合理的。 Web Flow 条件如下:

There is a clear start and an end point.
The user must go through a set of screens in a specific order.
The changes are not finalized until the last step.
Once complete it shouldn't be possible to repeat a transaction accidentally

我们将两者结合起来。用于多步活动的 Web Flow,跳转到流程中间没有意义,而用于单步活动的普通 MVC 控制器。您可以单独添加书签的内容。

例如,约会安排应用程序,"find my appointment" 可能是接受识别信息的单个控制器。 "Make a new appointment"是一个流程,有选择地点、日期、时间、确认预约等多个步骤

这真的很晚了,但我没有看到这个问题的满意答案,我想分享我在最近的项目中尝试过的一种方法,我觉得它比 spring 网络流方法更好这与 spring 视图严格相关,并且不必要地增加了已经存在的 xml 负载。我使用 angular js 和 Spring MVC 创建了一个 SPA(单页应用程序)。在 angular js 中,我没有使用路由器或状态,而是在控制器中创建了一个 div,如下所示

在服务器端,为了捕获从一帧(我指的是 SPA 中的特定屏幕)到另一帧的所有可能转换,我使用 MVEL 创建了一个规则树。所以在数据库中我有一个结构,它为每一帧存储一棵规则树。 MVEL 表达式中的数据由每个操作调用的各种服务设置。因此,在执行任何操作时都遵循以下步骤。

1) 验证操作。

2) 调用各种服务。

3) 从这些服务中获取数据并将其与用户的现有数据合并。

4) 将此捕获的数据连同当前帧的详细信息一起输入到每个帧的规则集合中。

5) 运行 树的规则 w.r.t 到当前帧并获取其输出。

6) 如果只有一个转换那么就是最后一个转换。如果有 2 个转换并且一个是默认转换,则忽略默认转换并使用另一个转换。

7) Return过渡到angular控制器的模板名称并在控制器范围内设置页面变量的值。

使用这种方法,我所有的服务必须做的就是将数据存储在不同的数据字段中 w.r.t 一个特定的操作。 Web Flows 的所有复杂 if-else 条件或任何复杂的流程定义(如 Spring-Web Flow 中定义的)都不是必需的。 MVEL 规则引擎管理所有这些,因为它都在数据库中,所以不需要服务器就可以更改它 re-start。

我相信这种使用 MVEL 的通用方法是一种灵活的方法,它可以全面处理复杂的流程问题,而不会使应用程序代码变得混乱或添加额外的不必要的 xml 文件。