Struts2 結果和結果型別


正如前面提到的,<results>標籤在Struts2的MVC框架的檢視中所扮演的角色。動作是負責執行業務邏輯。執行業務邏輯後,接下來的步驟是使用<results>標籤顯示的檢視。 

經常有一些附帶導航規則的結果。例如,如果在操作方法是對使用者進行驗證,有三種可能的結果。 (一)成功登入;(二)不成功的登入,使用者名或密碼錯誤;(三)帳戶鎖定。

在這種情況下的動作方法將被組態呈現的結果有三種可能的結果字串和三個不同的看法。我們已經看到在前面的例子。

但是,Struts2 不配合使用JSP作為檢視技術。畢竟MVC範例的整個目的是保持獨立的層,高度可組態的。例如,對於一個Web2.0的用戶端,可能希望返回XML或JSON作為輸出。在這種情況下,可以建立一個新的結果型別為XML或JSON和實現這一目標。

Struts的一些預定義的結果型別,無論我們已經看到了,這是預設的結果型別,它是用來排程排程到JSP頁面。 Struts 允許使用其它標示語言的技術呈現的結果和流行的選擇,包括 Velocity, Freemaker, XSLT 和Tiles.

分發結果型別:

排程程式的結果型別是預設型別,並使用,如果沒有其他的結果型別被指定。它被用來轉發到一個servlet,JSP,HTML頁面,等等,在伺服器上。它使用RequestDispatcher.forward()方法。

在我們前面的例子中,我們看到了“shorthand”的版本,在那裡我們提供了身體的結果標籤 JSP路徑。

<result name="success">
   /HelloWorld.jsp
</result>

我們也可以指定JSP檔案中使用一個<param name="location">的標籤內<result...>的元素如下:

<result name="success" type="dispatcher">
   <param name="location">
      /HelloWorld.jsp
   </param >
</result>

我們還可以提供一個分析引數,預設為true。解析引數位置引數決定是否將被解析為OGNL表示式。

FreeMaker結果型別:

在這個例子中,我們將看到我們如何使用FreeMaker作為檢視技術。 freemaker是一種流行的模板引擎,用於使用預定義的模板來生成輸出。讓我們Freemaker模板建立一個檔案稱為hello.fm以下內容:

Hello World ${name}

在這裡,上述檔案是一個模板的名字是從外面使用已定義的動作,將傳遞一個引數置。會保持這個檔案在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.yiibai.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檔案。現在右鍵點選專案名稱,並單擊Export > WAR File建立一個WAR檔案。然後部署這個WAR在Tomcat的webapps目錄下。最後,啟動Tomcat伺服器和嘗試存取URL http://localhost:8080/HelloWorldStruts2/index.jsp。這會給出以下畫面: 

Hello World Input

輸入一個值“Struts2”,並提交頁面。應該看到翻頁

Hello World Result

正如看到,這是完全一樣的JSP檢視,但我們是不依賴於使用JSP作為檢視技術。在這個例子中,我們已經使用Freemaker。

重定向結果型別:

重定向的結果型別,呼叫的是標準response.sendRedirect() 方法,使瀏覽器建立一個新的請求傳送到給定的位置。

我們可以提供無論是在體內的<result...>元素或作為一個<param name="location">的元素的位置。還支援重定向解析引數。下面是一個例子使用XML組態:

<action name="hello" 
   class="com.yiibai.struts2.HelloWorldAction"
   method="execute">
   <result name="success" type="redirect">
       <param name="location">
         /NewWorld.jsp
      </param >
   </result>
</action>

因此,只要修改struts.xml檔案,定義如上所述重定向型別,並建立一個新的檔案,在那裡會被重定向 Hello時動作將返回成功到NewWorld.jpg。也可以checkStruts2 重定向操作的例子,為了更好的理解。