Главная » Spring » Данные в последовательностях Spring

0

Если вам когда-либо приходилось играть в приключенческие игры, вы знаете, что при перемещении из одного пункта в другой персонажу иногда попадаются различные объекты, которые можно подобрать и забрать с собой. Иногда найденный объект можно сразу пустить в ход. Иногда его приходится нести с собой через всю игру, не представляя, для чего он может пригодиться, пока вы не добере- тесь до заключительной головоломки и не обнаружите, что объект можно использовать для ее решения.

Последовательности очень похожи на такие игры. В процессе перемещения последовательности от состояния к состоянию она

приобретает различные данные. Иногда эти данные оказываются необходимы немедленно (возможно, только чтобы отобразить их на странице). Иногда их приходится хранить на протяжении всего времени выполнения последовательности и использовать только по завершении последовательности.

Объявление  переменных

Данные в последовательностях хранятся в переменных, доступ- ных из любой точки внутри последовательности. Они могут созда- ваться разными способами. Простейший из них заключается в том, чтобы объявить переменную внутри последовательности с помощью элемента <var>:

<var  name="customer"  class="com.springinaction.pizza.domain.Customer"/>

Здесь создается новый экземпляр объекта Customer и помещается в переменную с именем customer. Эта переменная будет доступна во всех состояниях внутри последовательности.

Переменную можно также создать с помощью элемента <evaluate> как часть состояния-действия или состояния-представления. На- пример:

<evaluate  result="viewScope.toppingsList" expression="T(com.springinaction.pizza.domain.Topping).asList()"   />

В данном случае элемент <evaluate> вычисляет выражение (на язы- ке SpEL) и помещает результат в переменную с именем toppingsList, доступную только в области видимости представления. (Подробнее об областях видимости рассказывается чуть ниже.)

Аналогично значение переменной можно присвоить с помощью элемента <set>:

<set name="flowScope.pizza"

value="new  com.springinaction.pizza.domain.Pizza()"  />

Элемент  <set>   действует  практически  так  же,  как  элемент

<evaluate>, присваивая результат выражения переменной. В данном случае переменной pizza, доступной в области видимости последова- тельности, присваивается ссылка на новый экземпляр объекта Pizza.

В разделе 9.3, где описывается пример определения последо- вательности, вы познакомитесь с дополнительными особенностя-

ми использования этих элементов. Но перед этим посмотрим, что означают для переменных выражения «в области видимости пред- ставления», «в области видимости последовательности» и другие «в области видимости…».

Области видимости данных в последовательностях Данные, приобретаемые внутри последовательности, будут иметь различные области видимости в зависимости от контекста их ис- пользования. Фреймворк Spring Web Flow определяет пять областей

видимости, перечисленные в табл. 9.2.

Таблица 9.2. Области видимости переменных в последовательностях Spring Web Flow

Область видимости

Описание

Диалог

Создается при запуске последовательности верхнего уровня и разрушается по ее завершении. Совместно используется последовательностью верхнего уровня и всеми ее подпоследовательностями

Последовательность

Создается при запуске последовательности верхнего уровня и разрушается по ее завершении. Доступна только внутри создавшей ее последовательности

Запрос

Создается, когда запрос превращается в последова- тельность, и разрушается по окончании его обработки

Кадр

Создается при запуске последовательности верхнего уровня и разрушается по ее завершении. Также разру- шается после достижения состояния-представления

Представление

Создается при входе в состояние-представление

и разрушается после выхода из него. Доступно только внутри состояния-представления

Переменные, объявляемые с помощью элемента <var>, всегда по- лучают область видимости последовательности и доступны только внутри последовательности, где они объявлены. При использова- нии элементов <set> и <evaluate> область видимости определяется префиксом в значении атрибута name или result. Например, ниже показано, как присвоить значение переменной с именем theAnswer, доступной в области видимости потока:

<set   name="flowScope.theAnswer"   value="42"/>

Теперь, когда мы познакомились с основами веб-последователь- ностей, пришло время использовать полученные знания для соз-

дания полноценной веб-последовательности. В процессе работы подмечайте, как будет реализовано хранение данных в переменных с различными областями видимости.

Соединяем все вместе: последовательность pizza

Как уже говорилось выше в этой главе, мы оторвемся от при- мера приложения Spitter и создадим веб-приложение, с помощью которого голодные пользователи смогут заказать свою любимую итальянскую пиццу через Интернет1.

Как оказывается, процедура заказа пиццы естественным образом укладывается в концепцию последовательностей. Для начала мы создадим последовательность верхнего уровня, определяющую всю процедуру заказа пиццы, а затем добавим несколько подпоследова- тельностей, определяющих операции более низкого уровня.

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

По теме:

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