Struts2 結(jié)果類型

2020-06-15 19:24 更新

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

dispatcher結(jié)果類型

dispatcher結(jié)果類型是默認(rèn)的類型,如果未指定其他結(jié)果類型,則使用此類型。它用于轉(zhuǎn)發(fā)到服務(wù)器上的servlet,JSP,HTML等頁面。它使用RequestDispatcher.forward()方法。
我們?cè)谇懊娴氖纠锌吹搅恕昂唽憽卑姹?,里面我們用一個(gè)JSP路徑作為結(jié)果標(biāo)簽的主體。

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

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

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

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

FreeMaker結(jié)果類型

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

Hello World ${name}

上面的文件是一個(gè)模板,其中name是一個(gè)參數(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)在右鍵單擊項(xiàng)目名稱,然后單擊“Export”>“WAR File”創(chuàng)建WAR文件。然后在Tomcat的webapps目錄中部署這個(gè)WAR文件。最后,啟動(dòng)Tomcat服務(wù)器并嘗試訪問URL http://localhost:8080/HelloWorldStruts2/index.jsp。將顯示如下頁面:

輸入

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

成功

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

redirect結(jié)果類型

redirect結(jié)果類型調(diào)用標(biāo)準(zhǔn)的response.sendRedirect()方法,使得瀏覽器向給定的位置創(chuàng)建一個(gè)新請(qǐ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)建一個(gè)新的文件NewWorld.jpg,那么當(dāng)你的hello action返回“success”時(shí)就會(huì)產(chǎn)生redirect結(jié)果。你可以檢查Struts 2的Redirect Action示例,以便更詳細(xì)地了解。

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)