【问题标题】:Dispatching from Spring MVC to Spring Webflow从 Spring MVC 调度到 Spring Webflow
【发布时间】:2016-11-17 07:17:14
【问题描述】:

我的应用程序大约 80% 是 Spring MVC,但我有相当多的代码使用 Webflow。我目前正在使用 Spring MVC SimpleUrlHandlerMapping 调度到 webflow,我知道这不是我“应该”这样做的方式。

我的流程定义如下:

  • /WEB-INF/flows/process1/reservation/reservation-flow.xml
  • /WEB-INF/flows/process1/modify/modify-flow.xml
  • /WEB-INF/flows/process2/reservation/reservation-flow.xml
  • /WEB-INF/flows/process2/modify/modify-flow.xml

我希望能够通过以下 URL 访问它们:

我的流注册表 bean 如下所示:

<webflow:flow-registry id="flowRegistry" base-path="WEB-INF/flows" flow-builder-services="flowBuilderServices" >
    <webflow:flow-location-pattern value="/**/*/*-flow.xml"/>
</webflow:flow-registry>

我的 javascript 调度到 webflow 看起来像这样(javascript sn-p,这是一个非常复杂的页面):

var form = $('<form    action="${pageContext.request.contextPath}/process1/reservation/reservation.html"    method="POST">');

    form.append('<input name="param1" value="' + record.param1 + '" />');
    form.append('<input name="param2" value="' + record.param2 + '" />');
    form.append('</form>');
    submitForm(form);

现在真正的问题是:如何为它设置一个 url 处理程序映射,无论是 SimpleUrlHandlerMapping 还是其他?

谢谢!

【问题讨论】:

  • 所以你使用SimpleUrlHandlerMapping而不是FlowHandlerMapping一定是有原因的,你“应该”这样做吗?如果我理解正确你的要求,FlowHandlerMapping 不应该给你你想要的吗?
  • 正如@dbreaux 提到的,不使用FlowHandlerMapping 背后有什么特别的原因吗?另外,您是否探索过使用子流并在流映射配置文件中添加进一步的转换。
  • 我没有使用 FlowHandlerMapping 的原因是它对我没有用。在我的基本路径下,我会有这个:/process1/reservation/reservation.xml 我希望它映射到:example.com/context/process1/reservation/reservation.html 但没有运气。
  • 还有一件事,在 web flow 中,xml 文件包含各种转换的 flow 定义,那么当你直接希望它重定向到一个页面时,为什么要有 flow confi 呢?
  • 您的调度程序 servlet 在 web.xml 中匹配哪些模式?添加 *.html 后,我的流程也开始对此做出响应。 (DefaultFlowUrlHandler javadoc 描述它将在确定流 ID 时忽略扩展。)

标签: spring spring-mvc spring-webflow spring-webflow-2


【解决方案1】:

通常如果你想通过 Spring-MVC 向 web-flow 发送请求,我们必须 像这样设置 FlowHandlerAdapter:

<!-- Enables FlowHandler URL mapping -->
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
    <property name="flowExecutor" ref="flowExecutor" />
</bean>

然后定义flowMapping:

<!-- Maps request paths to flows in the flowRegistry;
    e.g. a path of /movie/showtime looks for a flow with id "movie/showtime" -->
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
    <property name="flowRegistry" ref="flowRegistry"/>
    <property name="order" value="0"/>
</bean>

具体实现也可以参考spring docs。

【讨论】:

    猜你喜欢
    • 2014-11-10
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 2014-02-05
    • 2018-09-24
    • 1970-01-01
    相关资源
    最近更新 更多