为什么(在什么情况下)我们需要将Spring Webflow与Spring MVC集成?这两个框架都用于创建Web应用程序,我不明白为什么要集成它们。如果有人可以澄清我的话,我将不胜感激。
答案 0 :(得分:1)
如果您的应用程序具有复杂的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
答案 1 :(得分:1)
我们将两者结合起来。用于多步骤活动的Web Flow,跳转到进程中间没有意义,以及用于单步活动的plain-MVC控制器。你可以单独书签的东西。
例如,约会安排应用程序“查找我的约会”可能是一个接受识别信息的控制器。 “新约会”是一个流程,有多个步骤选择位置,日期,时间,确认约会等。
答案 2 :(得分:1)
这已经很晚了但是我没有看到这个问题的满意答案,并希望分享我在最近的一个项目中尝试过的方法,我觉得这个方法比春天网络流程方法更好到spring视图并不必要地添加到已经存在的xml加载。我使用带有Spring MVC的角度js创建了一个SPA(单页面应用程序)。在角度js中我没有使用路由器或状态,而是在控制器中创建了一个div,如下所示
在服务器端捕获从一个帧(我指的是SPA中的特定屏幕)到另一个帧的所有可能转换我使用MVEL创建了一个规则树。所以在数据库中我有一个结构,它存储了每个帧的规则树。 MVEL表达式中的数据由每个操作调用的各种服务设置。因此,在任何行动中都遵循以下步骤。
1)验证行动。
2)调用各种服务。
3)从这些服务中捕获数据并将其与用户的现有数据合并。
4)将捕获的数据提供给每个帧的规则集以及当前帧的详细信息。
5)将w.r.t树的规则运行到当前帧并获取其输出。
6)如果只有一个转换,那么这是最后的转换。如果有2个转换,其中一个是默认转换,则忽略默认转换并使用另一个转换。
7)将转换的模板名称返回到角度控制器,并在控制器范围内设置页面变量的值。
使用这种方法,我所有的服务都必须将数据存储在不同的数据字段中,而不是特定的操作。 Web Flow的所有复杂的if-else条件或任何复杂的流程定义(如Spring-Web Flow中定义的那些)都不是必需的。 MVEL规则引擎管理了所有这些,因为它全部在数据库中,所以可以在不需要重新启动服务器的情况下进行更改。
我相信这种使用MVEL的通用方法是一种灵活的方法,可以全面处理复杂流的问题,而不会使应用程序代码变得混乱或添加额外的不必要的xml文件。