親愛的Spring社群,
我們很高興地宣佈 Spring Web Flow 下一代版本的第一個里程碑現已釋出。Spring Web Flow 2.0 M1 引入了多項主要新功能,包括對流管理持久化上下文的支援、對 Java Server Faces 的改進支援、完整的統一表達式語言 (EL) 支援以及更全面的示例 Web 應用程式。
Spring Web Flow 2.0 是一個用於開發 Java Web 應用程式控制器的下一代框架。該框架提供了一個統一的執行時環境,用於在各種環境中執行無狀態和有狀態的客戶端互動。
Web Flow 2.0 版本的釋出目標
如今,大多數應用程式開發人員使用 Spring Web Flow 來實現線性頁面流,例如嚮導,透過將 Web Flow 插入到他們的“基礎”Web 框架(例如 Spring MVC)中。此類頁面流表現出線性導航規則,是有狀態的,並形成 Web 應用程式功能的動態、自包含模組。一個很好的例子是貸款申請流程:Web Flow 獨特的流定義語言為實現這些型別的流程提供了自然的程式設計模型。
Spring Web Flow 2.0 的總體目標是正式地將產品從目前的主要是實現線性向導的框架,轉變為它一直以來旨在成為的:一個為所有型別的客戶端互動提供支援的通用應用程式控制器引擎。此類互動包括嚮導、無狀態“RESTful”互動以及“Web 2.0”應用程式中常見的更細粒度的、非線性/非同步互動。
Spring Web Flow 2.0 將為 Spring 社群提供一個統一的應用程式控制器框架和執行時,適用於執行所有型別的客戶端互動,並且能夠整合各種檢視渲染技術和 UI 元件模型。這個統一的執行時將能夠一致地應用管理儀表、安全性、AJAX 和託管永續性等獨特功能。
檢視完整的Spring Web Flow 2.0 路線圖。
Web Flow 2.0 M1 新功能和值得注意的改進
第一個 2.0 里程碑版本在邁向 2.0 最終版的過程中引入了多項主要新功能。這些功能將在下面描述。
基於 JPA 和 Hibernate 的流管理持久化上下文
Spring Web Flow 2.0 M1 引入了對 Hibernate 和 JPA 的流管理持久化上下文支援。釋出中包含的新酒店預訂示例應用程式演示了此功能。以下是它在預訂示例中的工作原理:
- 當新的酒店預訂流程開始時,會自動為您建立一個持久化上下文。
- 隨著您在流程中的進展,持久化上下文會自動用於所有資料訪問操作。您無需擔心查詢流繫結的 EntityManager 例項,或以任何方式對其進行管理。
- 當您授權預訂時,對託管持久化實體的所有更改都會自動提交併重新整理到資料庫。如果您選擇取消預訂,您的任何更改都不會被提交。
此酒店預訂流程的圖形Spring IDE檢視如下所示:
改進的 Java Server Faces (JSF) 支援
Spring Web Flow 2.0 M1 引入了 Spring Faces 模組 (spring-faces-2.0-m1.jar),這是一個隨 Web Flow 發行版提供的元件,其中包含對使用 Java Server Faces 開發 Web 應用程式的組織的一流支援。現有的 Web Flow + JSF 整合已重構到此專案中,此專案將成為所有未來 JSF 整合工作的主頁。
Spring Faces 模組為 Spring 社群提供了一個專門的專案,用於探索額外的 JSF 整合機會。2.0 M1 中的初始工作引入了與流行 Javascript GUI 小部件框架 Ext 的整合。提供了幾個輕量級 JSF UI 元件,封裝了富 Ext 小部件的渲染。我們採用的方法允許 Ext 小部件裝飾標準 JSF 元件,新增類似桌面的外觀和附加的 UI 行為,例如客戶端驗證。2.0 M1 中提供了以下 Ext 元件裝飾器:
- 一個日期驗證器元件,它對日期文字欄位執行富客戶端驗證,帶有一個美觀的日期選擇器控制元件。
- 一個文字驗證器,它對自由格式文字輸入欄位執行富客戶端驗證。
- 一個數字驗證器,它對數字文字欄位執行富客戶端驗證。
日期驗證器控制元件的螢幕截圖(也在酒店預訂示例應用程式中使用)如下所示:
Ext 控制元件外觀精美,由於所有 UI 行為都在客戶端執行,因此 UI 響應速度極佳。我們將在未來的 Web Flow 里程碑版本中,作為 Spring Faces 模組的一部分,在此領域新增進一步支援。
擁有專門的 Spring Faces 模組也簡化了在 JSF 環境中設定 Spring Web Flow 的過程。在 2.0 M1 之前,開發人員需要手動修改 faces-config.xml 來設定樣板 Spring/SWF 整合管道。使用 2.0 M1,只需在類路徑中包含 spring-faces-2.0-m1.jar 即可自動完成此設定。
統一表達式語言 (EL) 支援
此版本中的新功能還包括對統一 EL 的全面支援,它提供了替代 Spring Web Flow 當前預設使用的基於 OGNL 的表示式解析器的方法。現在建議在 JSF 環境中使用統一 EL,並且將在未來的里程碑版本中成為 JSF 開發人員的預設選項。
以下是酒店預訂流程定義中使用的 EL 表示式示例:
上述“id”表示式評估儲存在 Flow Scope 中的當前酒店識別符號。請注意,這裡無需任何顯式的 flowScope 字首。開發人員只需按名稱引用變數,ELExpressionEvaluator 就會透過搜尋各種作用域來解析變數。這使得 Web Flow 定義中的託管 bean 引用與用於模型繫結表示式的 JSF 檢視中的引用 100% 一致。例如,請參見 bookingForm.xhtml 檢視中的以下程式碼片段:

2.0 版本說明
Spring Web Flow 2.0 需要 Spring 2.0 或更高版本以及 Java 1.4 或更高版本。
Spring Web Flow 2.0 將盡可能保持與 1.0.x 基於 XML 的流定義語言的向後相容性。預計隨著 Web Flow 演變為完整的控制器框架,未來 Web Flow 2.x 里程碑中的一些 SWF SPI 將發生變化。
Spring Web Flow 2.0 的未來里程碑將引入新的方言,用於在真實的程式語言中定義流,從而提供比當前基於 XML 的流定義語法更強大的替代方案。基於 POJO 的 Java 流定義語法正在開發中,同樣還有基於 Groovy 的方法。此外,還將引入用於實現 REST-ful 和 CRUD 流的高階流方言。由於 Web Flow 定義 API 和執行執行時與任何具體的流定義語法是分離的,我們可以自然地引入新的語法,以不同的方式在執行時設計應用程式控制器。
對於 JSF 使用者,Spring Web Flow 2.0 和 Spring Faces 可在 JSF 1.1 和 JSF 1.2 上執行。Spring Faces 模組中的 UI 元件庫獨立於 Web Flow 執行時,也可與 JSF 的預設導航處理程式一起使用。
Spring Web Flow 2.0 將繼續全面支援 Servlet 2.4 或更高版本、Portlet 1.0 或更高版本以及 JUnit 3.8.1 或更高版本環境。
Spring Web Flow 2.0 將繼續在 Struts 1.2 或更高版本以及 Spring MVC 2.0 或更高版本環境中執行,並且在 2.0 最終版時也將可用作獨立的 Web 應用程式控制器框架。