Spring Webflow与AngularJS的比较

4

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

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

我开始研究Spring4 Webflow,并创建了一个示例披萨应用程序[感谢Spring in Action],它能够很好地工作,因为我们需要我们的应用程序非常可扩展,而这似乎是一种方法。

我们遇到的问题是-我们在应用程序的其他所有地方都使用AngularJS + Spring MVC / REST。 对于WebFlow,看起来我们需要使用spring form即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>
2个回答

4
我认为SWF从未被设计成用作单页应用程序(SPA)。 SWF“状态”标签始终调用服务器并刷新整个页面以重新呈现视图。这与AngularJS根本冲突。
可以选择在SWF中启用ajax请求,并仅在单个view-state标签内呈现部分html片段。但现在的问题是,您将所有业务逻辑放在一个单独的view-state标签中,这(在我看来)显着降低了使用SWF的优势并违反了SRP原则,但该选项存在。
请参见此示例,详细说明SWF ajax请求的工作方式:
{{link1:如何在子流程中包含弹出对话框}}
另请参阅有关如何启用ajax请求/部分片段的文档:

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


0

截至当前版本2.5(以及可能还有一些旧版本),似乎可以将Angular应用程序与SWF(Spring Web Flow)应用程序结合使用。 默认情况下,SWF使用后重定向获取方法来避免浏览器中的后退按钮问题(例如重新发布的确认和操作的幂等性),但您可以通过添加

来覆盖此默认行为。
mode=embedded

为所有针对Web流程起始状态的Ajax请求添加参数。

如文档所述:

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

更多详细信息请参见:

发布2.5版第11.7章:在页面上嵌入流程


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接