Главная » Spring » Переходы Spring

0

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

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

Переходы  определяются  элементами  <transition>,  вложенными в элементы состояний (<action-state>, <view-state>  и <subflow-state>). В простейшем случае элемент <transition> определяет следующее со- стояние в последовательности:

<transition to="customerReady" />

Атрибут to используется для ссылки на следующее состояние. Когда элемент <transition> объявляется с единственным атрибу- том to, переход играет роль перехода по умолчанию к указанному состоянию и будет выполнен, если остальные переходы недопус- тимы.

Чаще переходы определяются как направление движения при определенном событии. В состоянии-представлении событием обыч- но является некоторое действие, выполненное пользователем. В со- стоянии-действии событие является результатом вычисления вы- ражения. В случае с состоянием-подпоследовательностью событие определяется идентификатором конечного состояния, достигнутого подпоследовательностью. В любом случае, событие, определяющее направление перехода, можно объявить в атрибуте on:

<transition  on="phoneEntered"  to="lookupCustomer"/>

В этом примере последовательность выполнит переход к состоя- нию с идентификатором lookupCustomer, если будет возбуждено со- бытие phoneEntered.

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

<transition

on-exception=

"com.springinaction.pizza.service.CustomerNotFoundException" to="registrationForm"  />

Атрибут on-exception близко напоминает атрибут on, за исключени- ем того, что он определяет не событие, а исключение, вызывающее переход. В данном случае исключение CustomerNotFoundException вы- зовет переход к состоянию registrationForm.

Глобальные переходы

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

<transition>, встречающийся в последовательности несколько раз:

<transition  on="cancel"  to="endState"  />

Вместо того чтобы вновь и вновь повторять одинаковые объ- явления переходов в нескольких состояниях, их можно объявить глобальными переходами, вложив элемент <transition>  в элемент

<global-transitions>. Например:

<global-transitions>

<transition  on="cancel"  to="endState"  />

</global-transitions>

При наличии такого определения все состояния в последователь- ности автоматически получат неявный переход cancel.

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

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

По теме:

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