Перейти к основному содержимому

Руководство по Spring Web Flow в Java

· 4 мин. чтения

1. Обзор

Spring Web Flow основан на Spring MVC и позволяет реализовывать потоки в веб-приложении. Он используется для создания последовательности шагов, которые проводят пользователей через процесс или некоторую бизнес-логику.

В этом кратком руководстве мы рассмотрим простой пример процесса активации пользователя . Пользователю предоставляется страница, и он нажимает кнопку « Активировать » , чтобы продолжить, или кнопку « Отмена » , чтобы отменить активацию.

Не то чтобы здесь предполагалось, что у нас уже есть настроенное веб-приложение Spring MVC.

2. Настройка

Начнем с добавления зависимости Spring Web Flow в pom.xml :

<dependency>
<groupId>org.springframework.webflow</groupId>
<artifactId>spring-webflow</artifactId>
<version>2.5.0.RELEASE</version>
</dependency>

Последнюю версию Spring Web Flow можно найти в центральном репозитории Maven .

3. Создание потока

Давайте теперь создадим простой поток. Как было сказано ранее, поток — это последовательность шагов, которая ведет пользователя через процесс. В настоящее время это можно сделать только с помощью конфигурации на основе XML.

Каждый шаг в потоке называется состоянием .

В этом простом примере мы будем использовать состояние просмотра . Состояние просмотра — это шаг в потоке, который отображает соответствующее представление. Состояние просмотра относится к странице в приложении ( WEB-INF/view), при этом идентификатором состояния просмотра является имя страницы, на которую оно ссылается. ``

Мы также будем использовать элемент перехода . Элемент перехода используется для обработки событий, происходящих в определенном состоянии .

Для этого примера потока мы настроим три состояния просмотраактивацию , успех и отказ .

Процесс для этого потока довольно прост. Отправной точкой является представление активации . Если событие активации инициировано, оно должно перейти в представление успеха . Если событие отмены инициировано, оно должно перейти в представление отказа . Элемент перехода обрабатывает событие нажатия кнопки, которое происходит в состоянии просмотра:

<view-state id="activation">
<transition on="activate" to="success"/>
<transition on="cancel" to="failure"/>
</view-state>

<view-state id="success" />

<view-state id="failure" />

Начальная страница активации, на которую ссылается идентификатор активации и которая находится в WEB-INF/view/activation.jsp , представляет собой простую страницу с двумя кнопками: активировать и отменить . Нажатие кнопок с инициирует наши переходы, чтобы отправить пользователя либо в успешное состояние просмотра ( WEB-INF/view/success.jsp ), либо в состояние просмотра отказа ( WEB-INF/view/failure.jsp):

<body>
<h2>Click to activate account</h2>

<form method="post" action="${flowExecutionUrl}">
<input type="submit" name="_eventId_activate" value="activate" />
<input type="submit" name="_eventId_cancel" value="cancel" />
</form>
</body>

Мы используем flowExecutionUrl для доступа к контекстно-зависимому URI для текущего состояния просмотра выполнения потока .

4. Настройка потока

Далее мы настроим Spring Web Flow в нашей веб-среде. Мы сделаем это, настроив Flow Registry и Flow Builder Service.

Flow Registry позволяет нам указать расположение наших потоков, а также указать службу Flow Builder, если она используется.

Служба Flow Builder помогает нам настраивать службы и параметры, используемые для создания потоков.

Одним из сервисов, которые мы можем настроить, является view-factory-creator . View - factory-creator позволяет нам настраивать ViewFactoryCreator , используемый Spring Web Flow. Поскольку мы используем Spring MVC, мы можем настроить Spring Web Flow для использования преобразователя представлений в наших конфигурациях Spring MVC.

Вот как мы настроим Spring Web Flow для нашего примера:

@Configuration
public class WebFlowConfig extends AbstractFlowConfiguration {

@Autowired
private WebMvcConfig webMvcConfig;

@Bean
public FlowDefinitionRegistry flowRegistry() {
return getFlowDefinitionRegistryBuilder(flowBuilderServices())
.addFlowLocation("/WEB-INF/flows/activation-flow.xml", "activationFlow")
.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;
}
}

Мы также можем использовать XML для этой конфигурации:

<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
<property name="flowRegistry" ref="activationFlowRegistry"/>
</bean>

<flow:flow-builder-services id="flowBuilderServices"
view-factory-creator="mvcViewFactoryCreator"/>

<bean id="mvcViewFactoryCreator"
class="org.springframework.webflow.mvc.builder.MvcViewFactoryCreator">
<property name="viewResolvers" ref="jspViewResolver"/>
</bean>

<flow:flow-registry id="activationFlowRegistry"
flow-builder-services="flowBuilderServices">
<flow:flow-location id="activationFlow" path="/WEB-INF/flows/activation-flow.xml"/>
</flow:flow-registry>

<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
<property name="flowExecutor" ref="activationFlowExecutor"/>
</bean>
<flow:flow-executor id="activationFlowExecutor"
flow-registry="activationFlowRegistry"/>

5. Навигация по потокам

Чтобы перемещаться по потокам, запустите веб-приложение и перейдите по адресу http://localhost:8080/{context-path}/activationFlow . Чтобы запустить приложение, разверните его на сервере приложений, таком как Tomcat или Jetty .

Это отправляет нас на начальную страницу потока, которая является страницей активации , указанной в нашей конфигурации потока:

./ce773b51d16f89b43b68d320059193ac.png

Вы можете нажать на кнопку активации , чтобы перейти на страницу успеха:

./06600586ff0091eccff320a7c4da607d.png

Или кнопку отмены , чтобы перейти на страницу отказа:

./c82b8732b0430661857826fc5bb992fe.png

6. Заключение

В этой статье мы использовали простой пример в качестве руководства по использованию Spring Web Flow.

Вы можете найти полный исходный код и все фрагменты кода для этой статьи на GitHub.