程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Spring Web Flow 2.0入門 - 在購物車示例應用中配置Spring Web Flow

Spring Web Flow 2.0入門 - 在購物車示例應用中配置Spring Web Flow

編輯:關於JAVA

實現示例應用的購物車流程,可按以下步驟操作:

在 /WEB-INF/lib 目錄下導入相關類庫

在 webmvc-config.xml 中添加與 Spring Web Flow 集成的配置

添加 Spring Web Flow 的配置文件 webflow-config.xml

添加 flow 定義文件 shopping.xml

添加三個 jsp 頁面

修改 index.jsp

在 /WEB-INF/lib 目錄下導入相關類庫

將以下幾個 jar 包導入 /WEB-INF/lib 目錄:

org.springframework.webflow-2.0.2.RELEASE.jar

org.springframework.js-2.0.2.RELEASE.jar

org.springframework.binding-2.0.2.RELEASE.jar

jboss-el.jar

在 webmvc-config.xml 中添加配置

Spring Web MVC 相關的配置前面已經分析過了,完整的配置見清單 13 :

清單 13 webmvc-config.xml<?xml version="1.0" encoding="UTF-8"?>
<beans
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd">
  <bean
   id="viewResolver"
   class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="viewClass" value="org.springframework.web.servlet.view.JstlView">
   </property>
   <property name="prefix" value="/WEB-INF/jsp/">
   </property>
   <property name="suffix" value=".jsp">
   </property>
  </bean>
  <bean
   id="viewMappings"
   class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
   <!-- /shopping.do 請求由 flowController 來處理 -->
   <property name="mappings">
    <value> /shopping.do=flowController </value>
   </property>
   <property name="defaultHandler">
   <!-- UrlFilenameViewController 會將 "/index" 這樣的請求映射成名為 "index" 的視圖 -->
    <bean class="org.springframework.web.servlet.mvc.UrlFilenameViewController" />
   </property>
  </bean>
  <bean
   id="flowController"
   class="org.springframework.webflow.mvc.servlet.FlowController">
   <property name="flowExecutor" ref="flowExecutor"/>
  </bean>
</beans>

添加配置文件 webflow-config.xml

在 /WEB-INF/config 目錄下添加 webflow-config.xml 文件, schema 名字空間可直接復制清單 14 中的內容。

清單 14 webflow-config.xml<?xml version="1.0" encoding="UTF-8"?>
<beans
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:webflow="http://www.springframework.org/schema/webflow-config"
  xsi:schemaLocation=" http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
   http://www.springframework.org/schema/webflow-config
   http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.0.xsd">
  <webflow:flow-executor id="flowExecutor"/>
  <!— 所有 flow 定義文件位置在此配置, flow-builder-services 用於配置 flow 的特性 -->
  <webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices">
   <webflow:flow-location path="/WEB-INF/flows/shopping.xml" id="shopping"/>
  </webflow:flow-registry>
  <!—Web Flow 中的視圖通過 MVC 框架的視圖技術來呈現 -->
  <webflow:flow-builder-services id="flowBuilderServices"
   view-factory-creator="mvcViewFactoryCreator"/>
  <!— 指明 MVC 框架的 view resolver ,用於通過 view 名查找資源 -->
  <bean id="mvcViewFactoryCreator"
   class="org.springframework.webflow.mvc.builder.MvcViewFactoryCreator">
   <property name="viewResolvers" ref="viewResolver"/>
  </bean>
</beans>

webflow-config.xml 創建完成以後,不要忘記在 web-application-config.xml 中添加 import 元素,將 webflow-config.xml 文件導入。

清單 15 在 web-application-config.xml 中導入 webflow-config.xml。<import resource="webflow-config.xml"/>

添加 flow 定義文件 shopping.xml

在 /WEB-INF/flows 目錄下創建 shopping.xml 文件,描述了圖 2 所示的流程。

清單 16 shopping.xml<?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">
<view-state id="viewCart" view="viewCart">
<transition on="submit" to="viewOrder">
</transition>
</view-state>
<view-state id="viewOrder" view="viewOrder">
<transition on="confirm" to="orderConfirmed">
</transition>
</view-state>
<view-state id="orderConfirmed" view="orderConfirmed">
<transition on="returnToIndex" to="returnToIndex">
</transition>
</view-state>
<end-state id="returnToIndex" view="externalRedirect:servletRelative:/index.jsp">
</end-state>
</flow>

與清單 1 相比,在 view-state 元素中指定了 view 屬性的名字,這個名字也是 Spring Web MVC 中 viewResolver 所查找的 view 的名字。從清單 16 的配置中可以知道,這三個 view-state 元素所對應的視圖資源分別應該是: viewCart.jsp 、 viewOrder.jsp 和 orderConfirmed.jsp 。清單 16 中最後的 end-state 指明了當 flow 執行結束後跳轉到初始的 index.jsp 頁面,在此處的 view 屬性的名字需要解釋一下。 externalRedirect 用在 view 名字中,表示所指向的資源是在 flow 的外部, servletRelative 則表明所指向資源的路徑起始部分與 flow 所在 servlet 相同。 Spring Web Flow 2.0還提供了其他幾個關鍵詞用於重定向,這裡就不多介紹了。

添加三個 jsp 頁面

在 /WEB-INF/jsp 目錄下創建三個 flow 所需的視圖資源。以下清單只給出 jsp 頁面中 body 元素以內的代碼,其余省略。

清單 17 viewCart.jsp

<h1>View Cart</h1>
<a href="${flowExecutionUrl}&_eventId=submit">Submit</a>

清單 18 viewOrder.jsp

<h1>Order</h1>
<a href="${flowExecutionUrl}&_eventId=confirm">Confirm</a>

清單 19 orderConfirmed.jsp

<h1>Order Confirmed</h1>
<a href="${flowExecutionUrl}&_eventId=returnToIndex">Return to index</a>

這幾個頁面都使用了變量 flowExecutionUrl ,表示 flow 執行到當前狀態時的 URL 。 flowExecutionUrl 的值已經由 Spring Web Flow 2.0 框架的代碼進行賦值,並放入相應的 model 中供 view 訪問。 flowExecutionUrl 的值包含 flow 在執行過程中會為每一狀態生成的唯一的 key ,因此不可用其他手段來獲取。請求參數中 _eventId 的值與清單 16 中 transition 元素的 on 屬性的值是對應的,在接收到_eventId參數後,相應transition會被執行。

修改 index.jsp 頁面

在 index.jsp 頁面中添加啟動 flow 的鏈接,從 webmvc-config.xml 配置文件中可以看出,要啟動 flow ,只需提供 /shopping.do 鏈接即可。

清單 20 index.jsp

<h1>Hello!</h1><br/>
<a href="shopping.do">View Cart</a>

運行應用程序

將應用程序發布到 Tomcat 服務器,訪問 index.jsp ,並啟動 flow ,測試頁面的跳轉。效果如圖 5所示:

圖 4 flow 運行效果

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved