如何在Java Web应用程序中实现复杂的页面流

时间:2012-11-15 14:28:54

标签: java architecture spring-webflow page-flow

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

  1. 手动将流量输入控制器,进行重定向等。这显然不是维护的最佳选择
  2. JSF不仅处理流程,还需要使用JSF作为视图技术。我不喜欢这种锁定
  3. Spring网络流程。当前版本2.3.1定义了不易维护的XML流。即将发布的3.0版本承诺在纯java中使用注释定义流程,但它甚至没有时间轴。此外,项目开发在过去几年中显着放缓。
  4. GWT和Vaadin的概念更接近传统的桌面应用程序,然后更接近Web应用程序,这非常方便使用,但它不适合我的项目。
  5. 此外,我发现了许多这样的废弃项目:http://javasteps.sourceforge.net/

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

3 个答案:

答案 0 :(得分:2)

我个人推荐单页架构:

Architecture of a single-page JavaScript web application?

我不确定您的申请是否可行。我已经使用了你上面提到的所有流程,目前正在处理单页应用程序,我喜欢它。我们在客户端使用Dojo,它在服务器上调用REST API。这真的很不错。

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

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

答案 1 :(得分:1)

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

您可以尝试将其作为您的应用程序替代。

答案 2 :(得分:1)

这已经很晚了但是我没有看到这个问题的满意答案,并希望分享我在最近的一个项目中尝试过的方法,我认为这个方法比弹簧网络流程方法更好,这种方法严格限制在春天的意见。我使用带有Spring MVC的角度js创建了一个SPA。在角度js中我没有使用路由器或状态,而是在控制器中创建了一个div,如下所示

<div width="100%" id="fullertonDataPanel" ng-include="page"></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文件。