
- Struts 2 教程
- Struts2 - 首頁
- Struts2 - 基本 MVC 架構
- Struts2 - 概述
- Struts2 - 環境設定
- Struts2 - 架構
- Struts2 - 示例
- Struts2 - 配置
- Struts2 - Action
- Struts2 - 攔截器
- Struts2 - 結果型別
- Struts2 - 值棧/OGNL
- Struts2 - 檔案上傳
- Struts2 - 資料庫訪問
- Struts2 - 傳送郵件
- Struts2 - 驗證
- Struts2 - 國際化
- Struts2 - 型別轉換
- Struts2 - 主題/模板
- Struts2 - 異常處理
- Struts2 - 註解
- Struts 2 標籤
- Struts2 - 控制標籤
- Struts2 - 資料標籤
- Struts2 - 表單標籤
- Struts2 - Ajax 標籤
- Struts 2 整合
- Struts2 - Spring
- Struts2 - Tiles
- Struts2 - Hibernate
- Struts 2 有用資源
- Struts2 - 問題與解答
- Struts2 - 快速指南
- Struts2 - 有用資源
- Struts2 - 討論
Struts 2 - 結果 & 結果型別
如前所述,<results> 標籤在 Struts2 MVC 框架中扮演著檢視的角色。Action 負責執行業務邏輯。執行業務邏輯後的下一步是使用<results> 標籤顯示檢視。
通常,結果會附帶一些導航規則。例如,如果 Action 方法用於驗證使用者,則可能有三種可能的結果。
- 登入成功
- 登入失敗 - 使用者名稱或密碼錯誤
- 賬戶鎖定
在這種情況下,Action 方法將配置三種可能的結果字串和三種不同的檢視來呈現結果。我們在前面的示例中已經看到了這一點。
但是,Struts2 並沒有強迫你必須使用 JSP 作為檢視技術。畢竟,MVC 正規化的全部目的是保持層之間的分離並使其高度可配置。例如,對於 Web2.0 客戶端,你可能希望返回 XML 或 JSON 作為輸出。在這種情況下,你可以為 XML 或 JSON 建立一個新的結果型別來實現這一點。
Struts 帶有一系列預定義的結果型別,我們已經看到的預設結果型別是dispatcher,它用於分派到 JSP 頁面。Struts 允許你使用其他標記語言作為檢視技術來呈現結果,流行的選擇包括Velocity、Freemaker、XSLT 和Tiles。
Dispatcher 結果型別
dispatcher 結果型別是預設型別,如果未指定其他結果型別,則使用它。它用於轉發到伺服器上的 servlet、JSP、HTML 頁面等。它使用RequestDispatcher.forward() 方法。
我們在之前的示例中看到了“簡寫”版本,我們在其中將 JSP 路徑作為結果標籤的主體提供。
<result name = "success"> /HelloWorld.jsp </result>
我們還可以使用 <param name = "location"> 標籤在 <result...> 元素內指定 JSP 檔案,如下所示:
<result name = "success" type = "dispatcher"> <param name = "location"> /HelloWorld.jsp </param > </result>
我們還可以提供一個parse 引數,預設值為 true。parse 引數決定是否解析 location 引數以獲取 OGNL 表示式。
FreeMaker 結果型別
在這個例子中,我們將看到如何使用FreeMaker 作為檢視技術。Freemaker 是一個流行的模板引擎,用於使用預定義的模板生成輸出。現在讓我們建立一個名為hello.fm 的 Freemaker 模板檔案,內容如下:
Hello World ${name}
以上檔案是一個模板,其中name 是一個引數,它將從外部使用定義的 Action 傳遞。你將把此檔案儲存在你的 CLASSPATH 中。
接下來,讓我們修改struts.xml 以指定如下結果:
<?xml version = "1.0" Encoding = "UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name = "struts.devMode" value = "true" /> <package name = "helloworld" extends = "struts-default"> <action name = "hello" class = "com.tutorialspoint.struts2.HelloWorldAction" method = "execute"> <result name = "success" type = "freemarker"> <param name = "location">/hello.fm</param> </result> </action> </package> </struts>
讓我們保留 HelloWorldAction.java、HelloWorldAction.jsp 和 index.jsp 檔案,就像我們在示例章節中建立它們一樣。
現在右鍵單擊專案名稱並單擊匯出 > WAR 檔案以建立 WAR 檔案。
然後將此 WAR 部署到 Tomcat 的 webapps 目錄中。最後,啟動 Tomcat 伺服器並嘗試訪問 URL https://:8080/HelloWorldStruts2/index.jsp。這將產生以下螢幕。

輸入值“Struts2”並提交頁面。你應該看到下一頁。

如你所見,這與 JSP 檢視完全相同,只是我們沒有繫結到使用 JSP 作為檢視技術。在這個例子中,我們使用了 Freemaker。
重定向結果型別
redirect 結果型別呼叫標準response.sendRedirect() 方法,導致瀏覽器向給定位置建立新的請求。
我們可以在 <result...> 元素的主體中或作為 <param name = "location"> 元素提供位置。Redirect 也支援parse 引數。以下是一個使用 XML 配置的示例:
<action name = "hello" class = "com.tutorialspoint.struts2.HelloWorldAction" method = "execute"> <result name = "success" type = "redirect"> <param name = "location"> /NewWorld.jsp </param > </result> </action>
因此,只需修改你的 struts.xml 檔案以定義上面提到的重定向型別,並建立一個名為 NewWorld.jpg 的新檔案,每當 hello action 返回成功時,你將被重定向到該檔案。你可以檢視Struts 2 重定向 Action 示例以更好地理解。