美文网首页
spring in action 使用Spring Web Fl

spring in action 使用Spring Web Fl

作者: Theodore的技术站 | 来源:发表于2018-12-03 14:51 被阅读23次

    定披萨流程


    image.png
    <?xml version="1.0" encoding="UTF-8">
    <flow xmlns="http://www.springfreamwork.org/schema/webflow"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springwork.org/schema/webflow
      http://www.springwork.org/schema/webflow/spring-webflow-2.3.xsd">
      <var name="order"
            class="com.springination.pizza.domain.Order"/>
      <subflow-state id="identifyCustomer" subflow="pizza/customer">
        <output name="customer" value="order.customer"/>
        <transition on="customerReady" to="buildOrder"/>
      </subflow-state>
      <subflow-state id="buildOrder" subflow="pizza/order">
        <input name="order" value="order"/>
        <transition on="orderCreated" to="takePayment"/>
      </subflow-state>
      <subflow-state id="takePayment" subflow="pizza/payment">
        <input name="order" value="order"/>
        <transition on="paymentTaken" to="saveOrder"/>
      </subflow-state>
      <action-state id="saveOrder">
        <evaluate expression="pizzaFlowActions.saveOrder(order)"/>
        <transition to="thankCustomer"/>
      </action-state>
      <view-state id="thankCustomer">
        <transition to="endState"/>
      </view-state>
      <endState id="endState"/>
      <global-transitions>
        <transition on="cancel" to="endState"/>
      </global-transitions>
    </flow>
    

    Order 带有披萨订单的所有细节信息

    package com.springination.pizza.domain;
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;
    
    public class Order implements Serializable{
        private static final long serialVersionUID = 1L;
        private Customer customer;
        private List<Pizza> pizzas;
        private Payment payment;
        public Order(){
            pizzas = new ArrayList<Pizza>();
            customer = new Customer();
        }
        public Customer getCustomer(){
            return customer;
        }
        public void setCustomer(Customer customer){
            this.customer = customer;
        }
        public List<Pizza> getPizzas(){
            return pizzas;
        }
        public void setPizzas(List<pizza> pizzas){
            this.pizzas = pizzas;
        }
        public void addPizza(Pizza pizza){
            pizzas.add(pizza);
        }
        public float getTotal(){
            return 0.0f;
        }
        public Payment getPayment(){
            return payment;
        }
        public void setPayment(Payment payment){
            this.payment = payment;
        }
    }
    

    identifyCustomer状态

    <?xml version="1.0" encoding="UTF-8">
    <flow xmlns="http://www.springfreamwork.org/schema/webflow"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springwork.org/schema/webflow
        http://www.springwork.org/schema/webflow/spring-webflow-2.3.xsd"
        start-state="identifyCustomer">
    ...
    </flow>
    

    感谢客户流程

    <html xmlns:jsp="http://java.sun.com/JSP/Page">
      <jsp:output omit-xml-declaration="yes"/>
      <jsp:directive.page contentType="text/html;charset=UTF-8"/>
      <head><title>Spizza</title>></head>
      <body>
        <h2>Thank you for your order!</h2>
        <![CDATA[
        <a href="${flowExecutionUrl}&_eventId=finished">Finish</a>
        ]]>
      </body>
     </html>
    

    识别客户


    image.png
    <?xml version="1.0" encoding="UTF-8"?>
     <flow xmlns="http://www.springfreamwork.org/schema/webflow"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springwork.org/schema/webflow
        http://www.springwork.org/schema/webflow/spring-webflow-2.3.xsd">
        <var name="customer"
            class="com.springination.pizza.domain.Customer"/>
        <view-state id="welcome">
            <transition on="phoneEntered" to="lookupCustomer"/>
        </view-state>
        <action-state id="lookupCustomer">
            <evaluate result="customer" expression="pizzaFlowActions.lookupCustomer(requestParameters.phoneNumber)"/>
            <transition to="registrationForm" on-experssion="com.springination.pizza.service.CustomerNotFoundException"/>
            <transition to="customerReady"/>
        </action-state>
        <view-state id="registrationForm" model="customer">
          <on-entry>
            <evaluate expression="customer.phoneNumber=requestParameters.phoneNumber"/>
          </on-entry>
          <transition on="submit" to="checkDeliveryArea"/>
        </view-state>
        <decision-state id="checkDeliveryArea">
            <if test="pizzaFlowActions.checkDeliveryArea(customer.zipCode)"
                then="addCustomer"
                else="deliveryWarning"/>
        </decision-state>
        <view-state id="deliveryWarning">
            <transition on="accept" to="addCustomer"/>
        </view-state>
        <action-state id="addCustomer">
            <evaluate expression="pizzaFlowActions.addCustomer(customer)"/>
            <transition to="customerReady"/>
        </action-state>
        <end-state id="cancel"/>
        <end-state id="customerReady">
            <output name="customer"/>
        </end-state>
        <global-transitions>
          <transition on="cancel" to="cancel"/>
        </global-transitions>
    </flow>
    
    <html xmlns:jsp="http://java.sun.com/JSP/Page">
      <jsp:output omit-xml-declaration="yes"/>
      <jsp:directive.page contentType="text/html;charset=UTF-8"/>
      <head><title>Spizza</title>></head>
      <body>
        <h2>Thank you for your order!</h2>
        <![CDATA[
        <a href="${flowExecutionUrl}&_eventId=finished">Finish</a>
        ]]>
      </body>
     </html>
    
    欢迎并询问电话号码
    <!DOCTYPE html>
    <html xmlns:jsp="http://java.sun.com/JSP/Page"
      xmlns:form="http://www.springframework.org/tags/form">
      <jsp:output omit-xml-declaration="yes"/>
      <jsp:diretive.page contentType="text/html;charset=UTF-8"/>
    <head>
        <title>Spizza</title>
    </head>
    <body>
      <h2>Welcome to Spizza!!!</h2>
      <form:form>
        <input type="hidden" name="_flowExcutionKey"
                value="${flowExcutionKey}"/>
         <inpit type="text" name="phoneNumber"/><br/>
        <input type="submit" name="_eventId_phoneEntered"
                value="Lookup Customer"/>
      </form:form>
    </body>
    </html>
    

    注册新客户

    <html xmlns:jsp="http://java.sun.com/JSP/Page"
      xmlns:form="http://www.springframework.org/tags/form">
      <jsp:output omit-xml-declaration="yes"/>
      <jsp:diretive.page contentType="text/html;charset=UTF-8"/>
    <head>
        <title>Spizza</title>
    </head>
    <body>
      <h2>Customer Registration</h2>
      <form:form commandName="customer">
        <input type="hidden" name="_flowExcutionKey"
                value="${flowExcutionKey}"/>
        <b>Phone Number: </b><form:input path="phoneNumber"/><br/>
        <b>Name: </b><form:input path="name"/><br/>
        <b>Address: </b><form:input path="address"/><br/>
        <b>City: </b><form:input path="city"/><br/>
        <b>State: </b><form:input path="state"/><br/>
        <b>Zip Code: </b><form:input path="zipCode"/><br/>
         <inpit type="submit" name="_eventId_submit
                 value="Submit"/>
        <input type="submit" name="_eventId_cancel"
                value="Cancel"/>
      </form:form>
    </body>
    </html>
    

    判断配送地址 告知客户能不能送披萨

    <html xmlns:jsp="http://java.sun.com/JSP/Page">
        <jsp:output omit-xml-declaration="yes"/>
        <jsp:directive.page contentType="text/html;charset="UTF-8"/>
        <head><tittle>Spizza</tittle></head>
        <body>
            <h2>Delivery Unavailable</h2>
            <p>The address is outside of our delivery area. You may still place the order.
                but you will need to pick it up yourself.</p>
                <![DATA[
                <a href="${flowExecutionUrl}&_eventId=accept">
                                        Continue,I'll pick up the order</a> |
                <a href="${flowExecutionUrl}&_eventId=cancel">Never mind</a>
                ]]>
        <body>
    <html>
    
    image.png

    订单和添加披萨

    <?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.3.xsd">
        
        <input name="order" required="true"/>
        <view-state id="showOrder">
            <transition on="createPizza" to="createPizza"/>
            <transition on="checkout" to="orderCreated"/>
            <transition on="cancel" to="cancel"/>
        </view-state>
        <view-state id="createPizza" model="flowScope.pizza">
            <on-entry>
            <set name="flowScope.pizza"
                value="new com.springframework.pizza.domain.Pizza()"/>
            <evaluate result="viewScope.toppingList" expression=
                "T(com.springinaction.pizza.domain.Topping).asList()"/>
            </on-entry>
            <transition on="addPizza" to="showOrder">
                <evaluate expression="order.addPizza(flowScope.pizza)"/>
            </transition>
        </view-state>
        <end-state id="cancel" /
        <end-state id="orderCreated"/>
    </flow>
    

    实现添加披萨到订单中

    <div xmlns:form+"www.springframework.org/tags/form"
        xmlns:jsp="http://java.sun.com/JSP/Page">
      <jsp:output omit-xml-declaration="yes"/>
      <jsp:directive.page contentType="text/html;charset=UTF-8"/>
        <h2>Create Pizza</h2>
        <form:form commandName="pizza">
          <input type="hidden" name="_flowExcutionKey"
              value="${flowExecutionKey}"/>
          <b>Size:</b><br/>
        <form:radiobutton path="size"
                          label="Small(12-inch)" value="SMALL"/><br/>
        <form:radiobutton path="size"
                          label="Medium(14-inch)" value="MEDIUM"/><br/>
        <form:radiobutton path="size"
                          label="Large(16-inch)" value="LARGE"/><br/>
        <form:radiobutton path="size"
                          label="Ginormous(20-inch)" value="GINORMOUS"/><br/>
        <br/>
        <b>Toppings:</b><br/>
        <form:checkboxes path="toppings" item="${toppingList}"
                         delimiter=""/><br/><br/>
        <input type="submit"class="botton"
            name="_eventId_cancel" value="Cancel"/>
        </form:form>
    </div>
    

    支付流程


    image.png
    <?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.3.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="pizzaFlowAction.verifyPayment(flowScope.paymentDetails)"/>
            <transition to="paymentTaken"/>
        </action-state>
        <end-state id="cancel"/>
        <end-state id="paymentTaken"/>
    </flow> 
    

    支付的枚举类型

    import static org.apache.commons.lang.WordUtils.*;
    import java.util.List;
    import java.util.Arrays;
    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('_',' '));
        }
    }
    

    相关文章

      网友评论

          本文标题:spring in action 使用Spring Web Fl

          本文链接:https://www.haomeiwen.com/subject/xconqqtx.html