我知道有人问过这个问题,但我似乎没有找到合适的回答。所以想再次构建问题。
我们需要构建一个响应式应用程序,用于创建客户订单。
我开始研究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>
答案 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请求并仅呈现内容 需要更新显示流程的页面部分。
此处有更多详情: