Spring Web Flow和Spring MVC URL 404

时间:2014-09-15 13:18:47

标签: java spring spring-mvc spring-webflow

我目前正在使用Spring MVC 4.0.5,并希望将Spring Web Flow用于一些面向流程的页面。但是,我认为我的配置仍然存在一些问题。

在服务器日志中:

2014-09-15 20:54:49,280 [localhost-startStop-1] DEBUG org.springframework.webflow.definition.registry.FlowDefinitionRegistryImpl  - Registering flow definition 'ServletContext resource [/WEB-INF/flows/registration/registration-flow.xml]' under id 'registration'

但是,访问时,日志显示

2014-09-15 20:54:49,820 [http-bio-8080-exec-2] DEBUG org.springframework.webflow.mvc.servlet.FlowHandlerMapping  - No flow mapping found for request with URI '/appContext/registration/'

以下是我对网络流程的配置

@Configuration
public class WebFlowConfig extends AbstractFlowConfiguration {

private Logger logger = Logger.getLogger(WebFlowConfig.class);

@Bean
@Autowired
public FlowExecutor flowExecutor(FlowDefinitionRegistry flowRegistry,
        PlatformTransactionManager txManager, SessionFactory sessionFactory) {
    return getFlowExecutorBuilder(flowRegistry)
            .addFlowExecutionListener(new SecurityFlowExecutionListener(),
                    "*")
            .addFlowExecutionListener(
                    new HibernateFlowExecutionListener(sessionFactory,
                            txManager), "*").build();
}

@Bean
@Autowired
public FlowDefinitionRegistry flowRegistry(
        FlowBuilderServices flowBuilderServices) {
    return getFlowDefinitionRegistryBuilder(flowBuilderServices)
            .setBasePath("/WEB-INF/flows")
            .addFlowLocationPattern("/**/*-flow.xml").build();
}

@Bean
@Autowired
public FlowBuilderServices flowBuilderServices(
        MvcViewFactoryCreator mvcViewFactoryCreator, Validator validator) {
    return getFlowBuilderServicesBuilder()
            .setViewFactoryCreator(mvcViewFactoryCreator)
            .setValidator(validator).setDevelopmentMode(true).build();
}

@Bean
@Autowired
public MvcViewFactoryCreator mvcViewFactoryCreator(
        InternalResourceViewResolver viewResolver) {
    MvcViewFactoryCreator factoryCreator = new MvcViewFactoryCreator();
    factoryCreator.setViewResolvers(Arrays.asList(viewResolver));
    return factoryCreator;
}

@Bean
@Autowired
public FlowHandlerMapping flowHandlerMapping(FlowDefinitionRegistry registry) {
    FlowHandlerMapping handlerMapping = new FlowHandlerMapping();
    handlerMapping.setOrder(-1);
    handlerMapping.setFlowRegistry(registry);
    return handlerMapping;
}

@Bean
@Autowired
public FlowHandlerAdapter flowHandlerAdapter(FlowExecutor executor) {
    FlowHandlerAdapter handlerAdapter = new FlowHandlerAdapter();
    handlerAdapter.setFlowExecutor(executor);
    handlerAdapter.setSaveOutputToFlashScopeOnRedirect(true);
    return handlerAdapter;
}
}

希望有人可以提供帮助。感谢。

2 个答案:

答案 0 :(得分:0)

您在webflow配置中指定了FlowHandlerMapping

    Implementation of HandlerMapping that follows a simple convention 
    for creating URL path mappings from the ids of registered flow definitions. This 
    implementation returns a FlowHandler that invokes a flow if the current request 
    path matches the id of a flow in the configured FlowDefinitionRegistry.

Spring Web Flow的默认FlowUrlHandler实现是DefaultFlowUrlHandler

    Expects URLs to launch flow to be of this pattern:

    http://<host>/[app context path]/[app servlet path]/<flow path>

    The flow id is treated as the path info component of the request URL string. 
    If the path info is null, the servletPath will be used as the flow id. Also, if 
    the servlet path ends in an extension it will be stripped when calculating the flow id.
    The flow definition URL for the given flow id will be built by appending the 
    flow id to the base app context and servlet paths.

没有找到带有URI&#39; / appContext / registration /&#39;

的请求的流映射

您的路径信息必须为null,并且servlet映射类似于:/ appContext / registration / *导致流ID为/ appContext / registration /未注册。 所以检查你的servlet映射。

答案 1 :(得分:0)

删除MvcViewFactoryCreator定义和.setViewFactoryCreator(mvcViewFactoryCreator)