Spring Web Flow flowExecutionUrl пуст

Я делаю простой поток заказов через Spring Web Flow, также у меня есть Spring MVC в моем проекте. Делал все по гайдам, но мое веб-приложение никак не реагирует на мой поток. Конфигурация весеннего веб-потока:

     @Configuration
     @ComponentScan(basePackages = "config")
     public class WebFlowConfig extends AbstractFlowConfiguration {
@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.resourceViewResolver()));
    factoryCreator.setUseSpringBeanBinding(true);
    return factoryCreator;
}
@Autowired
private DispatcherConfig webMvcConfig;

@Bean
public FlowDefinitionRegistry flowRegistry() {
   FlowDefinitionRegistry registry = getFlowDefinitionRegistryBuilder().addFlowLocation("/WEB-INF/flows/order/flowcnf.xml","order").build();
   return registry;
}

@Bean
public FlowExecutor flowExecutor() {
    return

            getFlowExecutorBuilder(flowRegistry()).build();
}

@Bean
public FlowHandlerMapping flowHandlerMapping(){
    final FlowHandlerMapping handeler = new FlowHandlerMapping();
    handeler.setFlowRegistry(flowRegistry());
    handeler.setFlowUrlHandler(defaultFlowUrlHandler());
    return handeler;
}
@Bean
public DefaultFlowUrlHandler defaultFlowUrlHandler(){
    return new DefaultFlowUrlHandler();
}

@Bean
public FlowHandlerAdapter adapter(){
    FlowHandlerAdapter adapter = new FlowHandlerAdapter();
    adapter.setFlowUrlHandler(defaultFlowUrlHandler());
    adapter.setFlowExecutor(flowExecutor());
    return adapter;
}
}

Как я уже сказал, я использую Spring MVC, возможно, из-за этого возникают проблемы.

Фрагмент кода ниже должен запускать состояние просмотра «thankCustomer», но это не так. Я получаю ошибку 404, если я нажимаю на ссылку.

<a class=button href = "${flowExecutionUrl}&_eventId=thankCustomer">Замовити!</a>

И код потока:

<?xml version = "1.0" encoding = "UTF-8"?>
  <flow xmlns = "http://www.springframework.org/schema/webflow"
  xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation = "http://www.springframework.org/schema/webflow 
  http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd"
  start-state = "identify">
<var name = "order" class = "entity.BookOrder"/> 

<subflow-state id = "identify" subflow = "order/custom" >
    <output name = "user" value = "order.custName" />
    <transition on = "userIsReady" to = "buildOrder"/>
</subflow-state>

<subflow-state id = "buildOrder" subflow = "order/build">
    <input name = "order" value = "order" />
    <transition to = "takePayment" on = "orderBuilt" />
</subflow-state>


<subflow-state id = "takePayment" subflow = "order/takePayment" >
    <input name = "order" value = "order"/>
    <transition on = "paymentTaken" to = "saveOrder" />
</subflow-state>
<action-state id = "saveOrder">
    <evaluate expression = "userServiceImpl.addOrder(order.custName,order)"/>
    <transition to = "thankCustomer" />
</action-state>

<view-state id = "thankCustomer" view = "/WEB-INF/pages/greeting.jsp" >
    <transition to = "end-point" />
</view-state>

<end-state id = "end-point"/>

<global-transitions>
    <transition on = "cancel" to = "end-point" />
</global-transitions>

</flow>

Я попытался поставить идентификатор потока (порядок) вместо пустого потокаflowExecutionUrl, но все равно та же ошибка, я буду благодарен за любую помощь.

в вашем потоке нет переходов по событию thankCustomer.

rptmat57 21.02.2019 16:43

saveOrder действие-состояние? В любом случае, я напрямую подключаюсь к состоянию просмотра, используя href = "${flowExecutionUrl}&_eventId=thankCustomer", не так ли?

gg ff 21.02.2019 17:08

XML-файл — это ваш поток. в данном случае это выглядит так order. Итак, сначала вы вводите поток заказов (/order), а затем переходите к событию. в этом случае ваше событие thankCustomer, но в вашем потоке заказов нет такого перехода. вы не можете войти в часть своего потока напрямую, по крайней мере, не так

rptmat57 21.02.2019 18:42

Я заменил start-state = "identify" на start-state = "saveOrder", но ничего не изменилось, когда я захожу на локальный хост: 8080/order/, я все еще получаю ошибку 404 (страница не найдена)

gg ff 21.02.2019 18:51

где находится ваш xml-файл? Вы можете подтвердить, что это в /WEB-INF/flows/order/flowcnf.xml. также, вы можете вставить трассировку стека ошибки 404

rptmat57 21.02.2019 19:03

Спасибо за помощь! Проблема заключалась в том, что я не упорядочил свой FlowHandlerMapping в WebFlowConfig!

gg ff 22.02.2019 12:13
0
6
346
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне нужно было установить «порядок» для моего FlowHandlerMapping Bean, потому что у меня уже было 2 viewResolvers.

Другие вопросы по теме