親愛的 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 型別的任何例項都可以配置一個進入動作,該動作將在進入該狀態時執行。 這有助於實現通用的狀態設定邏輯。例如,ViewState 可以設定一個進入動作來執行任意的預渲染邏輯。此類預渲染邏輯可以載入參考資料來填充表單下拉列表。 作為複合狀態進入動作的一部分,任意數量的動作可以按順序執行
<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 退出動作
任何 TransitionableState 型別的任何例項都可以配置一個退出動作,該動作將在退出該狀態時執行。這有助於實現通用的狀態清理邏輯。 可以再次指定多個動作,它們將自動封裝在 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 標準
在 PR4 之前,沒有簡單的方法可以為一個流程定義集指定哪些監聽器應該觀察啟動的流程執行。 新的 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 配置將 Listener 1 和 2 附加到所有流程 (*) 的執行中,而 Listener 3 僅附加到 "sampleFlowA"。
顯著增強的表示式語言支援
此版本的一個真正優勢是新的 Spring 資料繫結模組持續取得進展。 spring-binding 中包含一個表示式解析和評估抽象,它與強大的型別轉換設施無縫整合。 這兩者結合使用,可以將表示一個或多個表示式(例如 “Announcement: ${org} ${product} ${release} is out!”)的任意字串轉換為可評估的表示式,利用任何表示式語言,預設使用 OGNL。 Spring Web Flow 在多個地方利用了這套機制,包括重定向表示式、轉換表示式和屬性對映表示式
- 例如,對於針對請求上下文進行評估的重定向表示式
redirect:/${sourceEvent.parameters.url}?attribute1=${flowScope.foo}&attribute
2=${requestScope.bar}"
- 用於驅動動態狀態轉換決策的轉換表示式
<transition on="${result == 'success' && ${flowScope.selectedItinerary.price} > 500.0" to="requireCreditCheck"/>
- 用於對映兩個源之間屬性的屬性對映表示式
<subflow-state id="browseDetails" flow="detailFlow">
<attribute-mapper>
<input value="${sourceEvent.parameters.id}" as="someBean.id" from="string" to="long"/>
</attribute-mapper>
...
</subflow-state>
增強的屬性對映器型別轉換支援
輸入和輸出對映元素的“from”和“to”屬性可用於指定型別轉換規則。 因此,定義
<input value="${sourceEvent.parameters.id}" as="someBean.id" from="string" to="long"/>
表示
將 ${sourceEvent.parameters.id} 的值從字串轉換為 long,並將 long 結果設定到 someBean.id。
基於會話的 TransactionSynchronizer 策略
PR4 中新增了一個 TransactionSynchronizer,它在 HTTP 會話範圍的儲存中管理一個事務令牌。 這非常適合處理利用 continuations 並需要防止重複應用事務發生的流程。
新的便捷動作實現
webflow.action 包現在包含幾個新的動作實現,包括:CompositeAction、DelegatingAction 和 GuardedAction。
啟用 JMX 的流程執行統計
sellitem 示例現在演示了使用 JMX 管理協議收集所有 Web Flow 的全域性統計資訊,並使用任何 JMX 客戶端(例如 JDK 1.5 的 JConsole)監控這些統計資訊的能力。 未來的 web flow 版本將增強此能力,以實現基於每個流程執行的管理和監控。
簡化並改進了 Struts 整合
PR4 大大簡化了 Struts 1.x 整合,並與 Spring 1.2.2 引入 SpringBindingActionForm 保持一致。 不再需要特殊的 FlowActionMapping,因為所有 webflow 特定的配置現在都由 Spring 管理。 請參閱 birthdate 示例應用程式以獲取具體示例。
其他
改進了 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 將於 7 月底釋出,並整合 Portlet MVC 和 JSF。
祝好,
Keith Donald
Erwin Vervaet