親愛的 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 版本的目標
如今,大多數應用開發者透過將 Web Flow 整合到他們的“基礎”Web 框架(例如 Spring MVC)中,來使用 Spring Web Flow 實現線性頁面流程,例如嚮導。 此類頁面流程具有線性導航規則、有狀態,並形成動態的、自包含的 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 的初期工作引入了與 Ext 的整合,Ext 是一個流行的 Javascript GUI 小部件框架。 提供了幾個輕量級的 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,只需在您的 classpath 中包含 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 2.x 里程碑版本中,隨著 Web Flow 演變為一個完整的控制器框架,一些 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 應用控制器框架。