Spring Web Flow 1.0 RC2 發布

發布 | Keith Donald | 2006年6月10日 | ...


 

親愛的 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>
        <mapping source="flightNumber" target="flowScope.flightNumber"/>
    </input-mapper>

    ...
</flow>
上面的 <input-mapper> 定義了 flow 的輸入合約,聲明此 flow 支援 "flightNumber" 輸入屬性。 當在啟動時提供 flightNumber 時,它將被映射到 "flowScope" 下,名稱為 "flightNumber"。 映射器還能夠在映射操作期間執行類型轉換。

若要自訂 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 {
    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();
}
當啟動一個新的 flow 執行並且需要將其持久化超過一個請求時,儲存庫會呼叫 "beginConversation" 以啟動一個新的邏輯
對話,並將屬性放置在對話範圍中以追蹤執行狀態。 同樣地,當 flow 執行結束時,管理對話也會結束,並且會清除任何已分配的狀態。

未來,我們希望在此系統中提供強大的功能,包括透過 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 核心不再知道 "對話" 的額外概念。 這意味著幾件事

  • 整體儲存庫介面更簡單,更容易使用自訂 FlowExecutionKeys 建立自訂 FlowExecutionRepositories。
  • SWF 核心詞彙更強大:flow 執行器呼叫 flow 執行以執行 flow。 超過一個請求後保持活動狀態的執行會被持久化到儲存庫。
  • 預設儲存庫實作選擇委派給一個不同的 "對話子系統",用於追蹤由執行系統驅動的對話狀態,但對該系統的依賴性已完全封裝並且是可選的。

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 團隊

取得 Spring 電子報

隨時關注 Spring 電子報

訂閱

領先一步

VMware 提供培訓和認證,以加速您的進展。

瞭解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供對 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔案。

瞭解更多

即將舉行的活動

查看 Spring 社群中所有即將舉行的活動。

檢視全部