Struts2 結(jié)果類型

2020-06-15 19:24 更新

如前面所述,<results>標簽在Struts2 MVC框架中扮演視圖的角色。Action負責執(zhí)行業(yè)務(wù)邏輯,下一步就是使用<results>標簽顯示視圖。
通常有一些導(dǎo)航規(guī)則附加的結(jié)果。例如,如果action是進行驗證用戶,則有三種可能的結(jié)果:(a)成功登錄(b)登錄失敗:用戶名或密碼不正確(c)帳戶鎖定。
在這種情況下,action將配置三個可能的結(jié)果字符串和三個不同的視圖來渲染結(jié)果,這在我們前面的例子中已經(jīng)看到過了。
但是,Struts2不綁定使用JSP作為視圖技術(shù)。畢竟,MVC范例的目的是保持圖層分離和高度可配置。例如,對于Web2.0客戶端,你可能希望返回XML或JSON作為輸出。在這種情況下,你可以為XML或JSON創(chuàng)建一個新的結(jié)果類型并實現(xiàn)這一點。
Struts提供了許多預(yù)定義的結(jié)果類型,我們已經(jīng)看到的是默認的結(jié)果類型dispatcher,它用于分發(fā)到JSP頁面。Struts允許你使用其他標記語言為視圖技術(shù)呈現(xiàn)結(jié)果,較常選用的包括Velocity,Freemaker,XSLTTiles。

dispatcher結(jié)果類型

dispatcher結(jié)果類型是默認的類型,如果未指定其他結(jié)果類型,則使用此類型。它用于轉(zhuǎn)發(fā)到服務(wù)器上的servlet,JSP,HTML等頁面。它使用RequestDispatcher.forward()方法。
我們在前面的示例中看到了“簡寫”版本,里面我們用一個JSP路徑作為結(jié)果標簽的主體。

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

我們還可以使用<result ...>元素中的<param name="location">標簽來指定JSP文件,如下所示:

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

我們還可以使用一個parse參數(shù),默認情況下為true。parse參數(shù)確定是否將為OGNL表達式解析位置參數(shù)。

FreeMaker結(jié)果類型

在這個例子中,我們將介紹如何使用FreeMaker作為視圖技術(shù)。Freemaker是一個流行的模板引擎,使用預(yù)定義的模板生成輸出。讓我們創(chuàng)建一個包含以下內(nèi)容的名為hello.fm的Freemaker模板文件:

Hello World ${name}

上面的文件是一個模板,其中name是一個參數(shù),將使用定義的action從外部傳遞。你可以在CLASSPATH中保留此文件。接下來,讓我們參考下面修改struts.xml以指定結(jié)果:

<?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="cn.w3cschool.struts2.HelloWorldAction"
         method="execute">
         <result name="success" type="freemarker">
            <param name="location">/hello.fm</param>
         </result>
      </action>
      
   </package>

</struts>

我們繼續(xù)保留之前在HelloWorld示例一章中創(chuàng)建的HelloWorldAction.java,HelloWorldAction.jsp和index.jsp文件?,F(xiàn)在右鍵單擊項目名稱,然后單擊“Export”>“WAR File”創(chuàng)建WAR文件。然后在Tomcat的webapps目錄中部署這個WAR文件。最后,啟動Tomcat服務(wù)器并嘗試訪問URL http://localhost:8080/HelloWorldStruts2/index.jsp。將顯示如下頁面:

輸入

輸入值“Struts2”并提交,你可以看到以下頁面

成功

這個例子中我們使用了Freemaker,可以看到,這與JSP視圖完全相同,只是我們不綁定使用JSP作為視圖技術(shù)。

redirect結(jié)果類型

redirect結(jié)果類型調(diào)用標準的response.sendRedirect()方法,使得瀏覽器向給定的位置創(chuàng)建一個新請求。
我們可以在<result...>元素的主體中或作為<param name="location">的元素中給定位置。redirect也支持parse參數(shù),以下是使用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文件來定義上面提到的redirect結(jié)果類型,并創(chuàng)建一個新的文件NewWorld.jpg,那么當你的hello action返回“success”時就會產(chǎn)生redirect結(jié)果。你可以檢查Struts 2的Redirect Action示例,以便更詳細地了解。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號