Struts 2 - 結果 & 結果型別



如前所述,<results> 標籤在 Struts2 MVC 框架中扮演著檢視的角色。Action 負責執行業務邏輯。執行業務邏輯後的下一步是使用<results> 標籤顯示檢視。

通常,結果會附帶一些導航規則。例如,如果 Action 方法用於驗證使用者,則可能有三種可能的結果。

  • 登入成功
  • 登入失敗 - 使用者名稱或密碼錯誤
  • 賬戶鎖定

在這種情況下,Action 方法將配置三種可能的結果字串和三種不同的檢視來呈現結果。我們在前面的示例中已經看到了這一點。

但是,Struts2 並沒有強迫你必須使用 JSP 作為檢視技術。畢竟,MVC 正規化的全部目的是保持層之間的分離並使其高度可配置。例如,對於 Web2.0 客戶端,你可能希望返回 XML 或 JSON 作為輸出。在這種情況下,你可以為 XML 或 JSON 建立一個新的結果型別來實現這一點。

Struts 帶有一系列預定義的結果型別,我們已經看到的預設結果型別是dispatcher,它用於分派到 JSP 頁面。Struts 允許你使用其他標記語言作為檢視技術來呈現結果,流行的選擇包括Velocity、Freemaker、XSLTTiles

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。這將產生以下螢幕。

Hello World Struts 4

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

Hello World Struts 5

如你所見,這與 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 示例以更好地理解。

廣告