【问题标题】:Spring Webflow VS AngularJSSpring Webflow VS AngularJS
【发布时间】:2016-03-16 06:25:51
【问题描述】:

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

我们需要构建一个响应式应用程序,我们的客户将使用它来创建订单。

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

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

createPizza.jsp

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

order-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>

【问题讨论】:

    标签: angularjs spring-webflow


    【解决方案1】:

    我认为 SWF 从未被设计为用作 SPA(单页应用程序)。 SWF 'state' 标签总是调用服务器并刷新整个页面以重新呈现视图。这与 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

    【讨论】:

      【解决方案2】:

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

      来覆盖此默认行为
      mode=embedded
      

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

      如文档中所述:

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

      更多细节在这里:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-23
        • 2014-11-10
        • 2011-07-29
        • 2011-03-30
        • 1970-01-01
        • 1970-01-01
        • 2012-12-30
        • 2015-05-19
        相关资源
        最近更新 更多