<result> 元素的 type 屬性決定 Action 執行後的視圖處理方式。Struts 2 內建多種結果類型,涵蓋轉發、重導向、串流、鏈式呼叫等場景。
| 類型 | 用途 | 典型場景 |
|---|---|---|
dispatcher | 預設。請求轉發至 JSP/頁面 | 一般頁面渲染 |
redirect | 瀏覽器端重導向(HTTP 302) | 表單提交後防重複提交、登入成功跳轉 |
redirectAction | 重導向至另一個 Action | 跨模組流程跳轉、權限檢查後導向 |
chain | Action 鏈式呼叫(同一請求) | 多 Action 共同處理單一請求 |
stream | 直接輸出 InputStream 至瀏覽器 | 檔案下載、圖片驗證碼、報表匯出 |
freemarker | FreeMarker 模板渲染 | 模板引擎視圖 |
plainText | 以純文字顯示視圖資源原始碼 | 除錯、顯示設定檔內容 |
httpheader | 控制特殊 HTTP 行為(狀態碼、Header) | REST API 狀態控制 |
<result type="plainText">
<param name="location">welcome.jsp</param>
<param name="charSet">UTF-8</param>
</result>
<result type="redirect">welcome.jsp</result>
特性:瀏覽器地址列變更、請求參數/屬性/Action 實例全部丟失。
<result type="redirectAction">
<param name="actionName">test2</param>
<param name="namespace">/b</param>
</result>
特性:前一 Action 的處理結果、參數、屬性全部丟失,適用於完整流程切換。
dispatcher(預設)。redirect。redirectAction。chain。stream。redirect 後無法存取原請求的 request.getAttribute(),若需傳值請用 Flash 機制或 Session。redirectAction 的 namespace 必須以 / 開頭,否則相對當前命名空間。stream 搭配 contentType、contentDisposition 參數。