親愛的 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 版本中包含許多新的和值得注意的增強功能。 以下是其中的一些
狀態輸入動作
任何狀態類型的任何實例都可以配置一個輸入動作,該動作將在輸入狀態時執行。 這有助於通用的狀態設定邏輯。 例如,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 Criteria
在 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 設定將監聽器 1 和 2 附加到所有流程 (*) 的執行個體,而監聽器 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} 的值從字串轉換為長整數,並在 someBean.id 設定長整數結果。
基於會話的 TransactionSynchronizer 策略
PR4 新增了一個新的 TransactionSynchronizer,它在 HTTP 會話範圍儲存中管理交易權杖。 它非常適合與利用延續並且需要防止重複應用程式交易發生的流程一起使用。
新的便利動作實作
webflow.action 套件現在提供多個新的動作實作,包括:CompositeAction、DelegatingAction 和 GuardedAction。
支援 JMX 的流程執行統計資訊
sellitem 範例現在示範了使用 JMX 管理協定收集所有 Web Flows 全域統計資訊的功能,並使用任何 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