SPRING IN ACTION 第4版笔记-第八章Advanced Spring MVC-004-Pizza例子的用户流程(flowExecutionKey、_eventId_phoneEntered、flowExecutionUrl )
2016-03-06 20:51
741 查看
一、
1.
![](http://images2015.cnblogs.com/blog/653056/201603/653056-20160306202554471-1663231609.png)
2.
![](http://images2015.cnblogs.com/blog/653056/201603/653056-20160306202732174-718517142.png)
3.customer-flow.xml
自己定义customer,最后output
或把customer的数据直接在order.customer中操作
(1)要求一个手机号码
welcome.jsp
First, note the hidden _flowExecutionKey field. When a view state is entered, the flow pauses and waits for the user to take some action. The flow execution key is given to the view as a sort of claim ticket for the flow. When the user submits the form, the flow execution key is sent along with it in the _flowExecutionKey field, and the flow resumes where it left off.
Also pay special attention to the submit button’s name. The _eventId_ portion of the button’s name is a clue to Spring Web Flow that what follows is an event that should be fired. When the form is submitted by clicking that button, a phoneEntered event is fired, triggering a transition to lookupCustomer
(2)根据号码查找用户
(3)注册一个新用户
注意:通过path="customer.xxx",实现了自动装配
(4)检查注册地址是否在配送范围内
The key flow-related items in deliveryWarning.jspx are the two links that offer the customer a chance to continue with the order or to cancel. Using the same flowExecutionUrl variable that you use in the welcome state, these links trigger either an accept event or a cancel event in the flow. If an accept event is sent, the flow will transition to the addCustomer state. Otherwise, the global cancel transition will be followed, and the subflow will transition to the cancel end state.
(5)保存用户数据
(6)结束用户模块的流程
1.
![](http://images2015.cnblogs.com/blog/653056/201603/653056-20160306202554471-1663231609.png)
2.
![](http://images2015.cnblogs.com/blog/653056/201603/653056-20160306202732174-718517142.png)
3.customer-flow.xml
自己定义customer,最后output
<?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"> <var name="customer" class="com.springinaction.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-exception="com.springinaction.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>
或把customer的数据直接在order.customer中操作
<?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"/> <!-- Customer --> <view-state id="welcome"> <transition on="phoneEntered" to="lookupCustomer"/> <transition on="cancel" to="cancel"/> </view-state> <action-state id="lookupCustomer"> <evaluate result="order.customer" expression= "pizzaFlowActions.lookupCustomer(requestParameters.phoneNumber)" /> <transition to="registrationForm" on-exception= "com.springinaction.pizza.service.CustomerNotFoundException" /> <transition to="customerReady" /> </action-state> <view-state id="registrationForm" model="order" popup="true" > <on-entry> <evaluate expression= "order.customer.phoneNumber = requestParameters.phoneNumber" /> </on-entry> <transition on="submit" to="checkDeliveryArea" /> <transition on="cancel" to="cancel" /> </view-state> <decision-state id="checkDeliveryArea"> <if test="pizzaFlowActions.checkDeliveryArea(order.customer.zipCode)" then="addCustomer" else="deliveryWarning"/> </decision-state> <view-state id="deliveryWarning"> <transition on="accept" to="addCustomer" /> <transition on="cancel" to="cancel" /> </view-state> <action-state id="addCustomer"> <evaluate expression="pizzaFlowActions.addCustomer(order.customer)" /> <transition to="customerReady" /> </action-state> <!-- End state --> <end-state id="cancel" /> <end-state id="customerReady" /> </flow>
(1)要求一个手机号码
welcome.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <html> <head><title>Spring Pizza</title></head> <body> <h2>Welcome to Spring Pizza!!!</h2> <form:form> <input type="hidden" name="_flowExecutionKey" value="${flowExecutionKey}"/> <input type="text" name="phoneNumber"/><br/> <!-- Fire phoneEntered event --> <input type="submit" name="_eventId_phoneEntered" value="Lookup Customer" /> </form:form> </body> </html>
First, note the hidden _flowExecutionKey field. When a view state is entered, the flow pauses and waits for the user to take some action. The flow execution key is given to the view as a sort of claim ticket for the flow. When the user submits the form, the flow execution key is sent along with it in the _flowExecutionKey field, and the flow resumes where it left off.
Also pay special attention to the submit button’s name. The _eventId_ portion of the button’s name is a clue to Spring Web Flow that what follows is an event that should be fired. When the form is submitted by clicking that button, a phoneEntered event is fired, triggering a transition to lookupCustomer
(2)根据号码查找用户
(3)注册一个新用户
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <html> <head><title>Spring Pizza</title></head> <body> <h2>Customer Registration</h2> <form:form commandName="order"> <input type="hidden" name="_flowExecutionKey" value="${flowExecutionKey}"/> <b>Phone number: </b><form:input path="customer.phoneNumber"/><br/> <b>Name: </b><form:input path="customer.name"/><br/> <b>Address: </b><form:input path="customer.address"/><br/> <b>City: </b><form:input path="customer.city"/><br/> <b>State: </b><form:input path="customer.state"/><br/> <b>Zip Code: </b><form:input path="customer.zipCode"/><br/> <input type="submit" name="_eventId_submit" value="Submit" /> <input type="submit" name="_eventId_cancel" value="Cancel" /> </form:form> </body> </html>
注意:通过path="customer.xxx",实现了自动装配
(4)检查注册地址是否在配送范围内
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head><title>Spring Pizza</title></head> <body> <h2>Delivery Unavailable</h2> <p>The address is outside of our delivery area. The order may still be taken for carry-out.</p> <a href="${flowExecutionUrl}&_eventId=accept">Accept</a> | <a href="${flowExecutionUrl}&_eventId=cancel">Cancel</a> </body> </html>
The key flow-related items in deliveryWarning.jspx are the two links that offer the customer a chance to continue with the order or to cancel. Using the same flowExecutionUrl variable that you use in the welcome state, these links trigger either an accept event or a cancel event in the flow. If an accept event is sent, the flow will transition to the addCustomer state. Otherwise, the global cancel transition will be followed, and the subflow will transition to the cancel end state.
(5)保存用户数据
<action-state id="addCustomer"> <evaluate expression="pizzaFlowActions.addCustomer(order.customer)" /> <transition to="customerReady" /> </action-state>
(6)结束用户模块的流程
<!-- End state --> <end-state id="cancel" /> <end-state id="customerReady" />
相关文章推荐
- 20145315 《Java程序设计》第一周学习总结
- 重读Java,争取到skilled & Core Java V1,10th第三章笔记
- 【JAVA】30、类与对象的关系
- Spring MVC入门实战(一)
- Core Java (七) Java中的static修饰符
- java-swing-皮肤
- Spring Profile基本使用
- Java中equals、==、hashcode的区别
- (java) Kth Smallest Element in a BST
- 【java学习记录】spilt小结
- Java [Leetcode 268]Missing Number
- JAVA学习调查问卷——20145101
- Java与数据库数据类型对应表
- 20145237《Java程序设计》第一周学习总结
- Java String 字符串
- (java) Convert Sorted Array to Binary Search Tree
- Java8中Lambda表达式的10个例子
- Java [Leetcode 319]Bulb Switcher
- Java多线程学习(五)
- JAVA词汇大全