下一代 Spring Web Flow 的第一個里程碑版本釋出
親愛的 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 中的初步工作引入了與流行 Javascript GUI 小部件框架 Ext 的整合。 提供了幾個輕量級的 JSF UI 元件,它們封裝了富 Ext 小部件的渲染。 我們採取的方法允許 Ext 小部件裝飾標準的 JSF 元件,從而新增桌面式的外觀和額外的 UI 行為,例如客戶端驗證。 2.0 M1 中提供了以下 Ext 元件裝飾器
- 一個日期驗證器元件,對日期文字欄位執行豐富的客戶端驗證,並提供漂亮的日期選擇器控制元件。
- 一個文字驗證器,對自由格式文字輸入欄位執行豐富的客戶端驗證。
- 一個數字驗證器,對數字文字欄位執行豐富的客戶端驗證。
以下是日期驗證器控制元件的螢幕截圖,該控制元件也用於酒店預訂示例應用程式中
Ext 控制元件看起來很棒,並且由於所有 UI 行為都在客戶端執行,UI 的響應速度也非常出色。 作為 Spring Faces 模組的一部分,我們將在未來的 Web Flow 里程碑版本中增加對這方面的進一步支援。
擁有一個專門的 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 將透過搜尋各種 scope 來解析變數。 這使得 Web Flow 定義中的 managed-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 發展成為一個完整的控制器框架,預計某些 SWF SPI 在未來的 Web Flow 2.x 里程碑版本中會發生變化。
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 應用程式控制器框架使用。