【发布时间】:2017-11-21 19:15:10
【问题描述】:
为什么(在什么场景下)我们需要将 Spring Webflow 与 Spring MVC 集成?这两个框架都用于创建网络应用程序,我看不出我们为什么要集成它们。如果有人能澄清一下,我将不胜感激。
【问题讨论】:
为什么(在什么场景下)我们需要将 Spring Webflow 与 Spring MVC 集成?这两个框架都用于创建网络应用程序,我看不出我们为什么要集成它们。如果有人能澄清一下,我将不胜感激。
【问题讨论】:
这真的很晚了,但我没有看到这个问题的令人满意的答案,并想分享我在最近的一个项目中尝试过的一种方法,我觉得它比严格绑定到的 spring web flow 方法更好spring 视图并不必要地添加到已经存在的 xml 负载中。我使用带有 Spring MVC 的 Angular js 创建了一个 SPA(单页应用程序)。在 Angular js 中,我没有使用路由器或状态,而是在控制器中创建了一个 div,如下所示
在服务器端,为了捕获从一个帧(我指的是 SPA 中的特定屏幕)到另一个帧的所有可能转换,我使用 MVEL 创建了一个规则树。所以在数据库中,我有一个结构,它为每一帧存储了一棵规则树。 MVEL 表达式中的数据由每个动作调用的各种服务设置。因此,任何操作都遵循以下步骤。
1) 验证操作。
2) 调用各种服务。
3) 从这些服务中捕获数据并将其与用户的现有数据合并。
4) 将此捕获的数据连同当前帧的详细信息一起输入到每个帧的规则集合中。
5) 将树的规则运行到当前帧并获取其输出。
6) 如果只有一个转换,那么这就是最终转换。如果有 2 个转换并且一个是默认转换,则忽略默认转换并使用另一个转换。
7) 将转场的模板名称返回给角度控制器,并在控制器范围内设置页面变量的值。
使用这种方法,我的所有服务所要做的就是根据特定操作将数据存储在不同的数据字段中。 Web Flows 或任何复杂流程定义(如 Spring-Web Flow 中定义的定义)的所有复杂 if-else 条件都不是必需的。 MVEL 规则引擎管理所有这些,并且由于它们都在数据库中,因此无需重新启动服务器即可进行更改。
我相信这种使用 MVEL 的通用方法是一种灵活的方法,它可以全面处理复杂流程的问题,而不会使应用程序代码混乱或添加额外的不必要的 xml 文件。
【讨论】:
我们将两者结合起来。 Web Flow 用于多步骤活动,在其中跳转到流程中间是没有意义的,而纯 MVC 控制器用于单步活动。您可以单独添加书签。
例如,约会安排应用程序“查找我的约会”可能是一个接受识别信息的控制器。 “重新预约”是一个流程,包含选择地点、日期、时间、确认预约等多个步骤。
【讨论】:
如果您的应用程序有复杂的 Flow 页面,需要将事件定义为有限状态机,则使用 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
【讨论】: