7

我正在尝试将一个相当复杂的页面流(100 多页)实现为传统的 Web 应用程序。我找到了一些选择,但没有一个是 100% 令人信服的

  1. 将流程硬编码到控制器中,进行重定向等。这显然不是维护的最佳选择
  2. JSF 不仅处理流程,还要求使用 JSF 作为视图技术。我不喜欢这种锁定
  3. 春季网络流。当前版本 2.3.1 定义了不易维护的 XML 流。即将发布的 3.0 版本承诺在纯 java 中使用注释定义流,但它甚至没有时间表。此外,项目开发在过去几年显着放缓。
  4. GWT 和 Vaadin 的概念更接近于传统的桌面应用程序,然后是 Web 应用程序,使用起来确实很方便,但它不适合我的项目。

另外我发现了几十个这样的废弃项目:http: //javasteps.sourceforge.net/

我想知道为什么所有这些项目都被放弃了,2012年实现复杂页面流的方法是什么?

4

3 回答 3

2

就个人而言,我推荐单页架构:

单页 JavaScript Web 应用程序的架构?

我不确定这是否适用于您的应用程序。我已经使用了你上面提到的所有流程,目前正在开发一个单页应用程序,我喜欢它。我们在客户端使用 Dojo,它调用服务器上的 REST API。已经很不错了。

Vaadin 也非常可靠,并且比简单的 GWT 更容易设置。如果您的项目中有很多 UI 人员喜欢用 CSS 和 Javascript 编写代码,那么他们会讨厌这种方法。

Spring Webflow 实际上非常可靠。我有一段时间没有看它了,但是当我使用它时,它完成了我当时所做的工作。

于 2012-11-15T14:33:51.453 回答
2

这真的很晚了,但我看不到这个问题的令人满意的答案,并且想分享我在最近的一个项目中尝试过的一种方法,我觉得它比严格绑定到弹簧视图的弹簧网络流方法更好。我使用带有 Spring MVC 的 Angular js 创建了一个 SPA。在 Angular js 中,我没有使用路由器或状态,而是在控制器中创建了一个 div,如下所示

<div width="100%" id="fullertonDataPanel" ng-include="page"></div>

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

1) 验证动作。

2) 调用各种服务。

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

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

5) 将树的规则运行到当前帧并获取其输出。

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

7)将过渡的模板名称返回给角度控制器,并在控制器范围内设置页面变量的值。

使用这种方法,我的所有服务所要做的就是将数据存储在特定操作的不同数据字段中。Web Flows 或任何复杂流程定义(如 Spring-Web Flow 中定义的定义)的所有复杂 if-else 条件都不是必需的。MVEL 规则引擎管理所有这些,并且由于它们都在数据库中,因此无需重新启动服务器即可更改它。

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

于 2018-03-31T13:35:11.570 回答
1

Vaadin 组件模型有一个新的 MVC 框架和 Web 流实现,称为Lexaden Web Flow

您可以在您的应用程序中试用它作为可能的替代方案。

于 2013-01-25T11:22:34.030 回答