Главная » Spring » Прием оплаты Spring

0

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

Эта простая последовательность изображена на рис. 9.5. Подобно подпоследовательности оформления заказа, данная подпоследова- тельность также принимает объект Order с помощью элемента <input>.

Как показано на рис. 9.5, после входа в подпоследовательность приема оплаты пользователь достигает состояния takePayment. В этом состоянии-представлении пользователь может указать, как он будет производить оплату: кредитной картой, чеком или наличными. Пос-

Рис. 9.5. Последний этап в процедуре заказа пиццы – принять оплату с помощью подпоследовательности

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

В листинге 9.10 представлено определение подпоследовательно- сти приема оплаты.

Листинг 9.10. Подпоследовательность приема оплаты содержит одно состояние-представление и одно состояние-действие

<?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">

<input name="order" required="true"/>

<view-state id="takePayment" model="flowScope.paymentDetails">

<on-entry>

<set name="flowScope.paymentDetails"

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

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

</on-entry>

<transition on="paymentSubmitted" to="verifyPayment" />

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

</view-state>

<action-state id="verifyPayment">

<evaluate result="order.payment"  expression= "pizzaFlowActions.verifyPayment(flowScope.paymentDetails)"    />

<transition to="paymentTaken" />

</action-state>

<end-state  id="cancel"  />

<end-state  id="paymentTaken"  />

</flow>

При входе последовательности в состояние takePayment  элемент

<on-entry> настраивает форму приема оплаты, выполняя первое вы- ражение на языке SpEL, создающее новый экземпляр PaymentDetails в области видимости последовательности. Этот объект будет хранить информацию, переданную с формой. Затем он создает в области ви-

димости представления переменную paymentTypeList со списком зна- чений из перечисления PaymentType (определяется в листинге 9.11). Здесь оператор T() языка SpEL используется для получения класса PaymentType, используемого для вызова статического метода toList().

Листинг 9.11. Перечисление PaymentType, определяющее виды оплаты

package com.springinaction.pizza.domain;

import  static  org.apache.commons.lang.WordUtils.*; import   java.util.Arrays;

import java.util.List;

public   enum   PaymentType   { CASH,  CHECK,  CREDIT_CARD;

public static List<PaymentType> asList() { PaymentType[] all = PaymentType.values(); return    Arrays.asList(all);

}

@Override

public  String  toString()  {

return capitalizeFully(name().replace(‘_’, ‘ ‘));

}

}

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

На данный момент мы исследовали все пути выполнения глав- ной последовательности и ее подпоследовательностей. Мы позна- комились со многими особенностями фреймворка Spring Web Flow. Но, прежде чем оставить тему веб-последовательностей, рассмотрим способы обеспечения безопасности доступа к последовательностям и к их состояниям.

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

По теме:

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