Spring Web Flow 關注業務流程建模,而非技術細節。其語義與 Servlet API 解耦,提供更高層次抽象,接近業務建模視角。
<flow>
<view-state id="viewCart">
<transition on="submit" to="viewOrder"/>
</view-state>
<view-state id="viewOrder">
<transition on="confirm" to="viewConfirmed"/>
</view-state>
<view-state id="viewConfirmed">
<transition on="returnToIndex" to="returnToIndex"/>
</view-state>
<end-state id="returnToIndex"/>
</flow>
| State 類型 | 用途 | 特徵 |
|---|---|---|
| View State | 渲染視圖,等待用戶交互 | 有視圖關聯,通過事件觸發轉換 |
| Action State | 執行業務邏輯 | 無視圖,自動執行 evaluate,轉換到下一狀態 |
| Decision State | 條件分支路由 | 根據表達式結果決定下一狀態 |
| Subflow State | 調用子流程 | 嵌套流程執行,支持輸入/輸出映射 |
| End State | 流程結束 | 可指定結束視圖或重定向 |
Flow (一次對話 Conversation)
│
├── View State ──(事件)──→ Transition ──→ View State
│ │
│ ├─(on-render)──→ 評估表達式
│ ├─(on-entry)──→ 進入狀態動作
│ └─(on-exit)──→ 退出狀態動作
│
├── Action State ──(自動)──→ Transition ──→ Next State
│
├── Decision State ──(條件)──→ Transition ──→ Branch State
│
├── Subflow State ──(調用)──→ Subflow ──(返回事件)──→ Transition
│
└── End State (流程終結)
客戶端請求 URL(如 /shopping.do)→ FlowController 提取 Flow ID → FlowExecutor 執行對應 Flow。