Spring Webflow VS AngularJS

时间:2015-12-10 14:51:08

标签: angularjs spring-webflow

我知道有人问过这个问题,但我似乎没有找到合适的回答。所以想再次构建问题。

我们需要构建一个响应式应用程序,用于创建客户订单。

我开始研究Spring4 Webflow,甚至创建了一个示例披萨应用程序[感谢Spring in Action],因为我们需要我们的应用程序具有很高的可扩展性,这看起来像是一种方法。

我们遇到的问题是 - 我们在应用程序中的其他地方使用AngularJS + Spring MVC / REST。 对于WebFlow,看起来我们需要使用spring形式,即Spring完成绑定,以及angularJS和Spring WebFlow之间的其他冲突。有没有办法将Spring WebFlow + AngularJS一起使用,我们利用角度充分的潜力,但仍然使用WebFlow来模仿会话行为?

createPizza.jsp

<form:form commandName="pizza">
      <input type="hidden" name="_flowExecutionKey" 
          value="${flowExecutionKey}"/>

阶flow.xml

<view-state id="createPizza" model="flowScope.pizza">
        <on-entry>
          <set name="flowScope.pizza" 
              value="new com.springinaction.pizza.domain.Pizza()" />

          <evaluate result="viewScope.toppingsList" 
              expression="T(com.springinaction.pizza.domain.Topping).asList()" />
        </on-entry>
        <transition on="addPizza" to="showOrder">
          <evaluate expression="order.addPizza(flowScope.pizza)" />
        </transition>
        <transition on="cancel" to="showOrder" />
    </view-state>

2 个答案:

答案 0 :(得分:2)

我不认为SWF曾被设计用作SPA(单页应用程序)。 SWF&#39;州&#39;标签始终调用服务器并刷新整个页面以重新呈现视图。这与AngularJS存在根本冲突。

或者,您可以在SWF中启用ajax请求,并仅在单个视图状态标记内呈现部分html片段。但现在的问题是,您将把所有业务逻辑放在一个视图状态标记中(在我看来)显着降低了使用SWF的优势并违反了SRP原则,但该选项存在。

请参阅此示例,详细说明SWF ajax请求的工作原理:

How to include a pop-up dialog box in subflow

另外,请参阅文档以了解如何启用ajax请求/部分片段:

http://docs.spring.io/spring-webflow/docs/current/reference/htmlsingle/#spring-js-ajax

答案 1 :(得分:0)

从当前版本2.5(也可能是一些较旧的版本)开始,它实际上可以将Angular应用程序与SWF(Spring Web Flow)应用程序结合使用。 默认情况下,SWF使用post-redirect-get方法来避免浏览器中的后退按钮问题(例如确认重新发布和操作的幂等性),但您可以通过添加

来覆盖此默认行为
mode=embedded

所有Ajax请求的参数,仅针对Web流的开始状态。

如文件中所述:

  

在&#34;嵌入式页面中启动&#34;模式流程不会发出流量   在Ajax请求期间执行重定向。 mode = embedded参数   只需要在启动流程时传递。你唯一的另一个   关注的是使用Ajax请求并仅呈现内容   需要更新显示流程的页面部分。

此处有更多详情:

Chapter 11.7 of the release 2.5: Embedding A Flow On A Page