Главная » Spring » Установка Spring Web Flow

0

Несмотря на то что Spring Web Flow является частью проекта Spring Framework, это расширение не входит в состав Spring Frame- work непосредственно. То есть, прежде чем приступать к созданию диалоговых приложений, выполняющих операции в определенной последовательности, необходимо добавить расширение Spring Web Flow в библиотеку классов (classpath) приложения.

Загрузить расширение Spring Web Flow можно на домашней стра- нице проекта (http://www.springframework.org/webflow). Выбирай- те для загрузки самую свежую версию (на момент написания этих строк последней была версия 2.2.1). Загрузив и распаковав zip-файл дистрибутива, можно найти следующие JAR-файлы расширения Spring Web Flow:

#  org.springframework.binding-2.2.1.RELEASE.jar;

#  org.springframework.faces-2.2.1.RELEASE.jar;

#  org.springframework.js-2.2.1.RELEASE.jar;

#  org.springframework.js.resources-2.2.1.RELEASE.jar;

#  org.springframework.webflow-2.2.1.RELEASE.jar.

Для реализации нашего примера нам потребуются только JAR- файлы binding и webflow. Остальные предназначены для использова- ния Spring Web Flow совместно с JSF и JavaScript.

Настройка расширения Web Flow в Spring

Расширение Spring Web Flow реализовано на основе фреймворка Spring MVC. Это означает, что все запросы в последовательности операций сначала обрабатываются сервлетом DispatcherServlet. За- тем в контексте приложения Spring следует настроить несколько специальных компонентов, реализующих обработку запросов и вы- полняющих последовательность операций.

Некоторые компоненты, являющиеся частью последовательности, объявляются с использованием конфигурационных элементов из пространства имен Spring Web Flow. Поэтому необходимо добавить объявление пространства имен в XML-файл определения контекста приложения:

<?xml  version="1.0"  encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:flow="http://www.springframework.org/schema/webflow-config" xsi:schemaLocation="http://www.springframework.org/schema/webflow-config

http://www.springframework.org/schema/webflow-config/

➥spring-webflow-config-2.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

После объявления пространства имен можно приступать к свя- зыванию компонентов, начиная с компонента-исполнителя после- довательности.

Связывание компонента-исполнителя

Как следует из его названия, компонент-исполнитель последова- тельности (flow executor) управляет выполнением последователь- ности операций. Когда пользователь приступает к выполнению некоторой последовательности, компонент-исполнитель создает и запускает экземпляр, представляющий последовательность опера- ций, для этого пользователя. Когда выполнение последовательности приостанавливается (например, когда пользователю отправляется страница, подготовленная представлением), компонент-исполни- тель возобновляет ее выполнение после совершения пользователем некоторого действия.

Компонент-исполнитель определяется в контексте Spring с по- мощью элемента <flow:flow-executor>:

<flow:flow-executor   id="flowExecutor"

flow-registry="flowRegistry"   />

Компонент-исполнитель отвечает за создание и выполнение по- следовательностей операций, но он не отвечает за загрузку опре- делений последовательностей. За загрузку отвечает другой компо- нент – реестр последовательности (flow registry), который мы соз- дадим далее. В нашем примере мы будем ссылаться на компонент реестра последовательности по идентификатору flowRegistry1.

Настройка реестра последовательности

Задача реестра последовательности состоит в том, чтобы за- грузить определение последовательности операций и сделать его доступным для компонента-исполнителя. Настройка реестра по- следовательности в конфигурации Spring выполняется с помощью элемента <flow:flow-registry>, как показано ниже:

<flow:flow-registry   id="flowRegistry" base-path="/WEB-INF/flows">

<flow:flow-location-pattern  value="*-flow.xml"  />

</flow:flow-registry>

Согласно этому объявлению, компонент реестра будет искать определения последовательностей операций в каталоге /WEB-INF/ flows, как указано в атрибуте base-path. Согласно элементу <flow:flow- location-pattern>, определениями последовательностей операций будут считаться все XML-файлы, имена которых оканчиваются на

-flow.xml.

Каждая последовательность имеет свой идентификатор. При использовании элемента <flow:flow-location-pattern>, как в нашем примере, идентификатором последовательности операций будет служить путь к каталогу относительно base-path, или часть пути, которую представляет двойная звездочка. На рис. 9.1 показано, как определяется идентификатор последовательности операций.

При желании можно опустить атрибут base-path и явно указать местоположение файла с определением последовательности:

1 В примере ниже атрибут id элемента flow-registry  определяется явно, но в этом нет необходимости. Если опустить этот атрибут, он получит значение по умолчанию flowRegistry.

Рис. 9.1. При использовании элемента <flow:flow-location-pattern>

путь к файлу с определением последовательности, относительно указанного каталога, будет использоваться как идентификатор последовательности

<flow:flow-registry  id="flowRegistry">

<flow:flow-location  path="/WEB-INF/flows/springpizza.xml"  />

</flow:flow-registry>

Здесь вместо элемента <flow:flow-locationpattern> использован эле- мент <flow:flow-location>. Атрибут path непосредственно указывает на файл /WEB-INF/flows/springpizza.xml с определением последовательно- сти операций. Когда настройка выполняется таким способом, иден- тификатором последовательности становится базовое имя файла определения – в данном случае springpizza.

Если потребуется еще более явно определить идентификатор последовательности, его можно указать в атрибуте id  элемента

<flow:flow-location>.  Например,  следующий  элемент  <flow:flow-loca- tion>  определяет идентификатор pizza  последовательности:

<flow:flow-registry  id="flowRegistry">

<flow:flow-location  id="pizza"

path="/WEB-INF/flows/springpizza.xml" />

</flow:flow-registry>

Обработка запросов к последовательности

Как было показано в предыдущей главе, контроллер Dispatcher- Servlet обычно передает запросы другим контроллерам для обра- ботки. Но в случае с последовательностями операций в помощь контроллеру DispatcherServlet необходимо создать компонент Flow- HandlerMapping, чтобы обеспечить передачу запросов расширению Spring Web Flow. Настройка компонента FlowHandlerMapping в контек- сте приложения Spring выполняется, как показано ниже:

<bean        class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">

<property name="flowRegistry" ref="flowRegistry" />

</bean>

Как показано в этом фрагменте, в компонент FlowHandlerMapping внедряется ссылка на реестр последовательности, чтобы он смог отображать URL-адреса запросов на последовательность. Напри- мер, для последовательности с идентификатором pizza компонент FlowHandlerMapping будет знать, что запросы с URL /pizza (относи- тельно пути контекста приложения) должны отображаться в эту последовательность.

Компонент FlowHandlerMapping отвечает за направление запросов к последовательности в Spring Web Flow, а за их обработку отвеча- ет компонент FlowHandlerAdapter. Компонент FlowHandlerAdapter явля- ется эквивалентом контроллера Spring MVC, в том смысле что он обрабатывает входящие запросы к последовательности. Компонент FlowHandlerAdapter определяется, как показано ниже:

<bean  class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">

<property  name="flowExecutor"  ref="flowExecutor"  />

</bean>

Этот компонент-обработчик играет роль моста между Dispatcher- Servlet и Spring Web Flow. Он обрабатывает запросы к последо- вательности и управляет ими. Здесь в него внедряется ссылка на компонент-исполнитель, управляющий последовательность, запро- сы к которой обрабатывает данный компонент.

Мы настроили все компоненты, необходимые для работы Spring Web Flow. Осталось лишь определить саму последовательность операций. Это будет сделано чуть ниже, но сначала познакомимся с элементами, составляющими последовательность.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии