2017-07-21 4 views
4

J'ai essayé la fonction de configuration Java de Spring Web Flow 2.4 en modifiant un projet existant de la configuration xml à JavaConfig. La version XML fonctionne, mais pas JavaConfig. Chaque fois que j'essaie de démarrer le flux avec l'URL http://localhost:8080/sia_p219_ch08_spring_web_flow_order_pizza_customer_flow_complete/pizza, il renvoie 404. Il n'y a aucune exception. La console ne montre aucun message "aucun mappage de requête trouvé pour ...". La page Web montre 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 renvoie 404 non trouvé (JSP)

Le projet est hébergé sur github, la version XML de travail est here.

Je pense que le problème est que l'URL de demande n'appelle pas le flux de pizza (/WEB-INF/flows/pizza/pizza-flow.xml).

Voici quelques extraits de code:

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; 
    } 
} 

WebConfigLes fichiers de définition de flux et les pages JSP sont corrects et vous pouvez les voir sur github si vous le souhaitez.

Merci beaucoup, toute aide est grandement appréciée.

Répondre

1

Ce que j'ai trouvé à ce jour que la configuration manque définitivement cette partie de la configuration dans WebFlowConfig (jetez un oeil à la documentation page for integration with Spring MVC pour plus de détails):

@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; 
} 

supprimer également la définition mvcViewFactoryCreator et setViewFactoryCreator appel du flowBuilderServices définition de haricot ainsi. Ça marche pour moi.

+0

J'ai suivi un tutoriel en ligne mais sa configuration ne correspond pas à mon application. Cette réponse fonctionne. – fall