尊敬的 Spring 社群:
我很高興地宣佈 Spring Web Flow Preview 4 (PR4) 釋出。此版本使 Spring Web Flow 與 Spring 1.2.2+ 對齊使用。
這將是 Web Flow 的最後一個預覽版;下個版本將是 1.0 RC1。要下載,請訪問:http://sourceforge.net/project/showfiles.php?group_id=73357&package_id=148517
注意:PR3 和 PR4 之間存在一些不相容的更改。其中包括根包名的重新命名,從 org.springframework.web.flow 到 org.springframework.webflow,表明 Web Flow 作為獨立模組應擁有頂級包的地位。 有關更改的完整列表,請在此處訪問更改日誌:http://opensource.atlassian.com/confluence/spring/display/WEBFLOW/Change+Log
WebFlow Portlet 使用者特別注意:PR4 不包含 Portlet MVC 整合。 Portlet MVC 使用者需要等待幾周後的 Web Flow RC1,屆時 Portlet MVC 將整合並隨 Spring 1.3 釋出。我們為由此造成的短期不便表示歉意:預計更好的 Portlet MVC 整合和示例應用程式將在未來幾周內迴歸。
此 PR4 版本中包含了一些新的重要增強。以下是其中的一些:
狀態進入動作 (State entry actions)
任何狀態型別(State type)的例項都可以配置一個進入動作(entry action),該動作將在進入該狀態時執行。 這有助於通用的狀態設定邏輯。例如,一個 ViewState 可以設定一個進入動作來執行任意的預渲染邏輯。這樣的預渲染邏輯可能載入參考資料以填充表單下拉列表。 任意數量的動作可以作為複合狀態進入動作(composite state entry action)的一部分按順序執行
<view-state id="displayCriteria" view="searchCriteria">
<entry>
<action bean="searchFormAction" method="setupForm"/>
<action bean="searchFormAction" method="setupReferenceData"/>
</entry>
<transition on="search" to="executeSearch">
<action bean="searchFormAction" method="bindAndValidate"/>
</transition>
</view-state>
可遷移狀態退出動作 (TransitionableState exit actions)
任何可遷移狀態型別(TransitionableState type)的例項都可以配置一個退出動作(exit action),該動作將在退出該狀態時執行。這有助於通用的狀態清理邏輯。 可以再次指定多個動作,它們將自動封裝在一個 CompositeAction 中。
<action-state id="executeSearch">
<action bean="searchAction"/>
<transition on="success" to="displayResults"/>
<exit>
<action bean="auditAction" method="logResults"/>
</exit>
</action-state>
流程執行監聽器標準 (Flow Execution Listener Criteria)
在 PR4 之前,很難為一組流程定義(flow definitions)定義哪些監聽器(listeners)應該觀察已啟動的流程執行(flow executions)。 新的 FlowExecutionListenerCriteria 提供了一種可插拔的策略,根據每個請求計算給定 Flow 定義的執行適用的監聽器集合。
<bean id="flowExecutionManager"
class="org.springframework.webflow.execution.servlet.ServletFlowExecutionManager">
<property name="listenerMap">
<map>
<entry value="*">
<key>
<list>
<bean class="example.Listener1"/>
<bean class="example.Listener2"/>
</list>
</key>
</entry>
<entry value="sampleFlowA">
<key>
<list>
<bean class="example.Listener3"/>
</list>
</key>
</entry>
</map>
</property>
...
</bean>
上面的 Spring 配置將監聽器 1 和 2 附加到所有流程 (*) 的執行中,而監聽器 3 僅附加到 "sampleFlowA"。
極大增強的表示式語言支援 (Greatly enhanced expression language support)
此版本中真正的優勢之一是新的 Spring 資料繫結模組(Spring data binding module)的持續進展。 spring-binding 中包含了一個表示式解析和評估抽象,該抽象與強大的型別轉換工具無縫整合。 這兩個組合使得可以消費並轉換為可評估表示式的任意字串,這些字串代表一個或多個表示式,例如“公告:${org} ${product} ${release} 已釋出!”,並利用任何表示式語言,預設是 OGNL。 Spring Web Flow 在多個地方利用了此機制,包括重定向表示式(redirect expressions)、轉換表示式(transition expressions)和屬性對映表示式(attribute mapping expressions)
- 例如,對於針對請求上下文評估的重定向表示式(redirect expressions)
redirect:/${sourceEvent.parameters.url}?attribute1=${flowScope.foo}&attribute
2=${requestScope.bar}"
- 用於驅動動態狀態轉換決策的轉換表示式(transition expressions)
<transition on="${result == 'success' && ${flowScope.selectedItinerary.price} > 500.0" to="requireCreditCheck"/>
- 用於在兩個源之間對映屬性的屬性對映表示式(attribute mapping expressions)
<subflow-state id="browseDetails" flow="detailFlow">
<attribute-mapper>
<input value="${sourceEvent.parameters.id}" as="someBean.id" from="string" to="long"/>
</attribute-mapper>
...
</subflow-state>
增強的屬性對映器型別轉換支援 (Enhanced attribute-mapper type-conversion support)
輸入和輸出對映元素(input and output mapping elements)的“from”和“to”屬性可用於指定型別轉換規則。 因此定義:
<input value="${sourceEvent.parameters.id}" as="someBean.id" from="string" to="long"/>
表示:
將 ${sourceEvent.parameters.id} 的值從字串轉換為 long,並將 long 結果設定到 someBean.id。
基於 Session 的 TransactionSynchronizer 策略 (Session-based TransactionSynchronizer strategy)
PR4 新增了一個在 HTTP-session 範圍儲存中管理事務令牌的 TransactionSynchronizer。 它非常適合與利用 continuations 並需要防止發生重複的應用事務的流程配合使用。
新的便利動作實現 (New convenience action implementations)
webflow.action 包現在提供了一些新的動作實現,包括:CompositeAction、DelegatingAction 和 GuardedAction。
JMX 支援的流程執行統計 (JMX-enabled flow execution statistics)
sellitem 示例現在演示了使用 JMX 管理協議收集所有 Web Flows 全域性統計資訊的能力,並使用任何 JMX 客戶端(如 JDK 1.5 JConsole)監控這些統計資訊。 未來的 web flow 版本將增強此功能,以允許按流程執行進行管理和監控。
簡化和改進的 Struts 整合 (Simplified and improved Struts integration)
Struts 1.x 整合在 PR4 中得到了極大簡化,並與 Spring 1.2.2 引入的 SpringBindingActionForm 對齊。 不再需要特殊的 FlowActionMapping,因為所有 webflow 特定的配置現在都由 Spring 管理。 請參考 birthdate 示例應用程式以獲取具體示例。
其他 (Other)
改進的 javadoc、錯誤訊息和日誌記錄
大大改進的構建系統,“一步式”示例應用程式構建/部署
Erwin 和我必須感謝 Colin Sampaleanu 構建了一個出色的構建系統,用於管理整個開發和釋出過程。 下載 PR4 後,您會發現構建和部署示例應用程式以及 Spring Web Flow 的任何元件(例如專案本身或繫結模組)變得簡單易行,並伴隨細緻、自動化的 jar 檔案管理。 這個“通用構建”系統基於 Ant 1.6.x,並利用 Ivy 進行 jar 依賴管理——
這些只是此版本的一些新功能。 有關更改的完整列表,請參閱 http://opensource.atlassian.com/confluence/spring/display/WEBFLOW/Change+Log
一如既往,我們非常重視您的反饋。 預計 Web Flow 1.0 RC1 將在七月底釋出,包含 Portlet MVC 和 JSF 整合。
祝好,
Keith Donald
Erwin Vervaet