領先一步
VMware 提供培訓和認證,以加速您的進展。
瞭解更多親愛的 Spring 社群:
我們很高興宣布 Spring Web Flow (SWF) 1.0 RC2 (Release Candidate 2) 已經發布。 下載 | 文件 | 變更日誌
此版本包含錯誤修復和小幅改進。1.0 RC2 的新增和值得注意的功能包括...
新增與值得注意的
支援以可配置的方式,從呼叫環境傳遞新啟動的 Flow 執行的輸入。 預設情況下,所有請求參數都會公開為輸入。 然後,flow 可以選擇使用其輸入映射器將此輸入映射到其自己的本地範圍中。 此映射器定義了 flow 的輸入合約,無論 flow 是作為頂級 flow 還是作為子 flow 啟動,該合約都保持一致。
考慮以下請求 URL 作為範例
https://127.0.0.1:8080/flights/search-flow?flightNumber=12345
預設情況下,當訪問此 URL 時,後端的 FlowExecutor 會將 "flightNumber" 請求參數放入 "input map" 中。 然後將輸入映射傳遞到 "search-flow" 的新執行。
在 search-flow 定義中
<flow start-state="executeSearch">上面的 <input-mapper> 定義了 flow 的輸入合約,聲明此 flow 支援 "flightNumber" 輸入屬性。 當在啟動時提供 flightNumber 時,它將被映射到 "flowScope" 下,名稱為 "flightNumber"。 映射器還能夠在映射操作期間執行類型轉換。
<input-mapper>
<mapping source="flightNumber" target="flowScope.flightNumber"/>
</input-mapper>
...
</flow>
若要自訂 flow 執行輸入映射的填充,例如,從請求路徑或其他一些外部來源提取屬性,請配置 "FlowExecutorImpl.inputMapper" 屬性。
支援在 JSR168 Portlet 環境中進行 flow 執行和外部重新導向。 結合基於延續的儲存庫,這允許在 Portlet 環境中使用瀏覽器導航按鈕 (返回、重新整理)。 此外,在 Portlet 環境中,我們現在公開一個 "globalSessionMap" 屬性,用於存取 Portlet Session APPLICATION_SCOPE 中的屬性。
一個名為 "SingleKeyFlowExecutionRepositoryFactory" 的新儲存庫 factory。 此實作會為每個持久 flow 執行產生一個單一的唯一識別碼。 它對於實現 1.0 EA "對話重新導向" 語意很有用 - 在每次 POST 之後,REDIRECT-GET 會命中一個穩定的 "flow 執行 URL",該 URL 嵌入了常數 flow 執行金鑰。 請參閱 NumberGuess 範例以獲取說明。
引入一個獨立的 "對話" 子系統,提供的 flow 執行儲存庫實作委派給該子系統,以劃定管理 flow 執行狀態的邏輯對話。 此對話子系統與 Spring Web 的其餘部分完全分離
Flow,可在 SWF 之外使用,並且可能會隨著時間的推移演變為其自己的獨立模組。 核心服務介面包括
public interface ConversationService {當啟動一個新的 flow 執行並且需要將其持久化超過一個請求時,儲存庫會呼叫 "beginConversation" 以啟動一個新的邏輯
public Conversation beginConversation(ConversationParameters parameters);
public Conversation getConversation(ConversationId id);
public ConversationId parseConversationId(String encodedId);
}
public interface Conversation {
public ConversationId getId();
public void lock();
public void end();
public Object getAttribute(String name);
public void setAttribute(String name, Object value);
public void removeAttribute(String name);
public void unlock();
}
未來,我們希望在此系統中提供強大的功能,包括透過 JMX 進行對話監控和管理,以及對話歷史記錄和統計資料。 我們還希望證明其對 Spring Web Flow 之外的其他環境的適用性。 特別感謝 Juergen Hoeller 和 Ben Hale 在設計此可移植對話服務抽象方面的幫助。
潛在的影響使用者變更
在通往 1.0 最終版本的道路上,1.0 RC2 有一些潛在的影響使用者的變更。 以下部分說明了它們
在 spring-webflow-dtd 中,我們將 <action/> 元素屬性 'resultName' 和 'resultScope' 分別重新命名為 'result-name' 和 'result-scope',以與其他屬性和元素名稱保持一致。
為簡單起見,已移除 FormAction 屬性 "bindOnSetupForm" 和 "validateOnBinding"。 經驗表明,這些屬性很少使用,並且一直是新使用者的困惑之源。 作為更好的替代方案,若要在進入檢視狀態之前執行資料繫結操作,只需從您的 flow 定義中呼叫 "bind" 動作方法。 若要計算是否應對 bindAndValidate 嘗試執行驗證,請覆寫單一的 "validationEnabled(RequestContext)" 鉤子。
已移除 FormAction "exposeFormObject" 動作方法。 只需使用首選的 "setupForm"。
FlowExecutionRepository 和 FlowExecutor SPI 介面已簡化。 現在,更多邏輯封裝在 FlowExecutionRepository 後面,包括產生的 FlowExecutionKeys 的結構和格式。 此外,FlowExecutionRepository 現在嚴格負責管理持久 flow 執行,而不是其他任何事情。 SWF 核心不再知道 "對話" 的額外概念。 這意味著幾件事
FlowExecutor 介面(SWF 的進入點)也簡化了呼叫者。 它現在封裝了複雜內部類型的知識,例如
EventIds 和 FlowExecutionKeys,因此總體而言更容易使用。
同樣地,已移除對顯式 "conversationRedirect" 的支援。 這表示移除了 "conversationRedirect:"
'view' 字首和 "CONVERSATION" RedirectType。 若要使用 1.0 RC2 實現相同的邏輯重新導向語意,只需使用 redirectOnPause 類型 FLOW_EXECUTION 和儲存庫Factory 配置 FlowExecutor
SingleKeyFlowExecutionRepositoryFactory。
--
Spring Web Flow 1.0 RC2 進一步完善了參考手冊,提供了 50 頁關於 SWF 用法的文件。 該手冊可在線上以 HTML 和 PDF 格式提供。
開始使用 Spring Web Flow 的最佳方法之一是檢閱並逐步了解範例應用程式。 我們建議檢閱所有範例,並根據需要從一開始就補充參考手冊材料。 1.0 RC2 版本附帶了十個範例應用程式,每個範例都展示了一組不同的產品功能。 這些範例是
1. Phonebook - 展示大多數功能的原始範例 (包括子 flow)
2. Sellitem - 展示具有條件轉換、flow 執行重新導向、對話範圍和延續的精靈
3. Flowlauncher - 展示所有可能的啟動和恢復 flow 的方式
4. Itemlist - 展示 REST 樣式的 URL 和內聯 flow
5. Shippingrate - 展示 Spring Web Flow 與 Ajax 的結合
技術 (感謝 Steven Devijver)
6. NumberGuess - 展示有狀態的 bean 和 "單一金鑰" flow
執行重新導向。
7. Birthdate - 展示 Struts 整合
8. Fileupload - 展示 multipart 檔案上傳
9. Phonebook-Portlet - Portlet 環境中的 phonebook 範例
(注意 flow 定義沒有變化)
10. Sellitem-JSF - JSF 環境中的 sellitem 範例
若要一步到位地建置用於部署的範例應用程式,只需提取發布歸檔檔案,存取 projects/spring-webflow/build-spring-webflow 目錄,然後執行 "ant dist" 目標。 請參閱發布 readme.txt 和
projects/spring-webflow/spring-webflow-samples/readme.txt 以取得有關發布歸檔檔案內容和範例的更多資訊。
所有範例專案都是可以直接匯入 Eclipse 的 Spring IDE 專案。
感謝所有支持此版本的人。 目前,我們預計 SWF 的下一個版本將是 1.0 最終版,目標是 6 月底
的時間範圍。 如果有必要,我們仍然有可能發布另一個 1.0 發布候選版本。 請務必監控 SWF 首頁和
論壇以獲取更新。
享受吧!
Spring Web Flow 團隊