Я делаю простой поток заказов через 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, но все равно та же ошибка, я буду благодарен за любую помощь.
saveOrder действие-состояние? В любом случае, я напрямую подключаюсь к состоянию просмотра, используя href = "${flowExecutionUrl}&_eventId=thankCustomer", не так ли?
XML-файл — это ваш поток. в данном случае это выглядит так order. Итак, сначала вы вводите поток заказов (/order), а затем переходите к событию. в этом случае ваше событие thankCustomer, но в вашем потоке заказов нет такого перехода. вы не можете войти в часть своего потока напрямую, по крайней мере, не так
Я заменил start-state = "identify" на start-state = "saveOrder", но ничего не изменилось, когда я захожу на локальный хост: 8080/order/, я все еще получаю ошибку 404 (страница не найдена)
где находится ваш xml-файл? Вы можете подтвердить, что это в /WEB-INF/flows/order/flowcnf.xml. также, вы можете вставить трассировку стека ошибки 404
Спасибо за помощь! Проблема заключалась в том, что я не упорядочил свой FlowHandlerMapping в WebFlowConfig!
Мне нужно было установить «порядок» для моего FlowHandlerMapping Bean, потому что у меня уже было 2 viewResolvers.
в вашем потоке нет переходов по событию
thankCustomer.