【问题标题】:Spring MVC with Spring WebflowSpring MVC 与 Spring Webflow
【发布时间】:2014-11-10 19:19:30
【问题描述】:

我正在尝试将 Spring Webflow 与我的 Spring MVC 应用程序一起使用。我查看了 booking-mvc 示例并遵循了它,但网络上的大多数示例都是使用 Tiles 完成的。我希望我不完全我的理解是错误的,Spring Webflow 可以与 Spring MVC 一起使用

我正在尝试使用 Spring MVC 控制器。但是当我进行提交/完成之类的转换时,似乎什么也没发生。

这是我的 Flow xml:

<view-state id="enterBookingDetails">
        <transition on="submit" to="reviewBooking" />
    </view-state>

    <view-state id="reviewBooking">
        <transition on="confirm" to="bookingConfirmed" />
        <transition on="revise" to="enterBookingDetails" />
        <transition on="cancel" to="bookingCancelled" />
    </view-state>

我已将 enterBookingDetails 和 reviewBooking 定义为控制器:

@RequestMapping(value = "/enterBookingDetails", method = RequestMethod.GET)
    public ModelAndView getPage(final HttpServletRequest request) {
        ModelAndView modelView = new ModelAndView();
        modelView.setViewName("pa");
        return modelView;
    }

    @RequestMapping(value = "/reviewBooking", method = RequestMethod.GET)
    public ModelAndView getPage2(final HttpServletRequest request) {

        ModelAndView modelView = new ModelAndView();
        modelView.setViewName("pb");
        return modelView;
    }

我的 Jsp 看起来像这样:

<form:form>
    <input type="hidden" name="_flowExecutionKey" value="${flowExecutionKey}" />
    <input type="hidden" name="_eventId" value="finished" />
    <input type="submit" value="Submit" name="_eventId_finished" />
</form:form>

最后是我的配置:

<bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="mvcViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
        <property name="order" value="1" />

    </bean>

        <!-- Register all Web Flow definitions under /WEB-INF/flows/**/*-flow.xml -->
    <webflow:flow-registry id="flowRegistry"
        base-path="/WEB-INF/flows" flow-builder-services="flowBuilderServices">
        <webflow:flow-location-pattern value="/**/*-flow.xml" />
    </webflow:flow-registry>

    <!-- Deploy a flow executor -->
    <webflow:flow-executor id="flowExecutor" />

    <!-- Configure flow builder services -->
    <!-- Configure view service -->
    <webflow:flow-builder-services id="flowBuilderServices"
        view-factory-creator="mvcViewFactoryCreator" />
    <!-- Web Flow components -->
    <!-- Install flow handler (FlowHandlerAdapter) -->
    <!-- It dispatches URL requests to flows -->
    <bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
        <property name="flowExecutor" ref="flowExecutor" />
    </bean>

    <!-- Map Http request path to flows register in the registry -->
    <bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
        <property name="flowRegistry" ref="flowRegistry" />
        <property name="order" value="0" />
    </bean>
    <bean id="mvcViewFactoryCreator"
       class="org.springframework.webflow.mvc.builder.MvcViewFactoryCreator">
       <property name="viewResolvers" ref="mvcViewResolver"/>
    </bean>

【问题讨论】:

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


    【解决方案1】:

    Spring Webflow是建立在spring web mvc之上的,所以两者可以一起使用。

    我了解到这种组合的问题在于,当出现配置错误时,唯一的症状是“什么都没有发生”。我最终查看了 org.springframework.web 和 org.springframework.webflow 的调试日志,然后跟踪到 Spring 源代码以诊断配置问题。

    spring 范式的目标是“约定优于配置”。我遇到的问题是,约定并不总是以熟悉它们的人可以轻松掌握的方式很好地定义。

    我必须解决的最后一个“问题”是 spring webflow 的约定是将流 xml 文件放在与 jsp 相同的文件夹中。

    在您的示例中,您似乎计划在同一视图后面的 spring-webflow 和未修饰的 web mvc 之间切换。如果一切都正确配置,对于给定的 uri,webflow 注册表中的任何内容都将胜过 UrlHandlerMapping 中的任何内容(您的注释)。如果您不知道,这可能会造成混乱。

    【讨论】:

      猜你喜欢
      • 2011-07-29
      • 1970-01-01
      • 2016-11-17
      • 2014-02-05
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      • 2015-11-08
      • 1970-01-01
      相关资源
      最近更新 更多