2017-07-21 4 views
4

既存のプロジェクトをxml設定からJavaConfigに変更することで、Spring Web Flow 2.4のJava設定機能を試しています。 XMLバージョンは動作しますが、JavaConfigは動作しません。 URL http://localhost:8080/sia_p219_ch08_spring_web_flow_order_pizza_customer_flow_complete/pizzaでフローを開始しようとするたびに、それは404を返します。例外はありません。コンソールに「no request mapping found for ...」というメッセージは表示されません。ウェブページはThe origin server did not find a current representation for the target resource or is not willing to disclose that one existsです。JavaConfig Spring Web Flowが404を返さない(JSP)

このプロジェクトのホストはgithubで、作業用XMLのバージョンはhereです。

私はこの問題は、リクエストURLがピザのフロー(/WEB-INF/flows/pizza/pizza-flow.xml)を呼び出さないことだと思います。ここで

は、いくつかのコードスニペットです:

WebAppInitializer:

@Override 
protected Class<?>[] getRootConfigClasses() { 
    return new Class<?>[] { RootConfig.class }; 
} 

@Override 
protected Class<?>[] getServletConfigClasses() { 
    return new Class<?>[] { WebConfig.class }; 
} 

@Override 
// map DispatcherServlet to/
protected String[] getServletMappings() { 
    return new String[] { "/" }; 
} 

RootConfig:

@Configuration 
@Import({WebFlowConfig.class}) 
public class RootConfig {} 

WebFlowConfig:

@Configuration 
@ComponentScan({"pizza"}) 
public class WebFlowConfig extends AbstractFlowConfiguration { 
    static{ 
     System.out.println("WebFlowConfig loaded"); 
    } 

    @Autowired 
    private WebConfig webMvcConfig; 

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

    @Bean 
    public FlowExecutor flowExecutor(){ 
     return getFlowExecutorBuilder(flowRegistry()).build(); 
    } 

    @Bean 
    public FlowBuilderServices flowBuilderServices() { 
     return getFlowBuilderServicesBuilder() 
       .setViewFactoryCreator(mvcViewFactoryCreator()) 
       .setDevelopmentMode(true) 
       .build(); 
    } 

    @Bean 
    public MvcViewFactoryCreator mvcViewFactoryCreator() { 
     MvcViewFactoryCreator factoryCreator = new MvcViewFactoryCreator(); 
     factoryCreator.setViewResolvers(Collections.singletonList(this.webMvcConfig.viewResolver())); 
     factoryCreator.setUseSpringBeanBinding(true); 
     return factoryCreator; 
    } 
} 

のWebConfig

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter { 
    static{ 
     System.out.println("WebConfig loaded"); 
    } 

    @Bean 
    public ViewResolver viewResolver() { 
     InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
     resolver.setPrefix("/WEB-INF/flows/"); 
     resolver.setSuffix(".jsp"); 
     return resolver; 
    } 

    // configure static content handling 
    @Override 
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {   
     configurer.enable(); 
    } 

フロー定義ファイルとJSPは問題なく、必要に応じてgithubに表示されます。

ありがとう、どんな助力も大歓迎です。

答えて

1

私がこれまでの構成は、間違いなくWebFlowConfigにおける設定のこの部分を欠いていることがわかりました何(詳細については、documentation page for integration with Spring MVCを見てみましょう):

@Bean 
@Autowired 
public FlowHandlerAdapter flowHandlerAdapter(FlowExecutor flowExecutor) { 
    FlowHandlerAdapter flowHandlerAdapter = new FlowHandlerAdapter(); 
    flowHandlerAdapter.setFlowExecutor(flowExecutor); 

    return flowHandlerAdapter; 
} 

@Bean 
@Autowired 
public FlowHandlerMapping flowHandlerMapping(FlowDefinitionRegistry flowDefinitionRegistry) { 
    FlowHandlerMapping flowHandlerMapping = new FlowHandlerMapping(); 
    flowHandlerMapping.setFlowRegistry(flowDefinitionRegistry); 
    flowHandlerMapping.setOrder(0); 

    return flowHandlerMapping; 
} 

flowBuilderServicesからmvcViewFactoryCreator定義とsetViewFactoryCreator呼び出しを削除bean定義も同様です。わたしにはできる。

+0

私はオンラインチュートリアルに従いましたが、その設定が自分のアプリに適合しません。この回答は機能します。 – fall

関連する問題