鍍金池/ 教程/ Java/ 結(jié)果類型
注釋
主題/模板
驗(yàn)證
有用的資源
Struts 2 注解類型
實(shí)例
攔截器
異常處理
表單標(biāo)簽
結(jié)果類型
值棧/OGNL
Spring 集成
數(shù)據(jù)標(biāo)簽
環(huán)境配置
配置
類型轉(zhuǎn)換
動(dòng)作
Hibernate 集成
本地化
發(fā)送郵件
Ajax 標(biāo)簽
數(shù)據(jù)庫訪問
體系結(jié)構(gòu)
文件上傳
Tiles 集成
概述
基本的 MVC 架構(gòu)
控制標(biāo)簽

結(jié)果類型

正如前面提到的, 標(biāo)簽在 Struts 2 的 MVC 框架中擔(dān)當(dāng) 視圖的角色。動(dòng)作是負(fù)責(zé)執(zhí)行業(yè)務(wù)邏輯。在執(zhí)行業(yè)務(wù)邏輯之后,下一步是使用 標(biāo)簽顯示視圖。

經(jīng)常有一些附帶結(jié)果的導(dǎo)航規(guī)則。例如,如果一個(gè)動(dòng)作方法是對(duì)用戶進(jìn)行驗(yàn)證,那么有三種可能的結(jié)果。
(a)成功的登錄; (b)不成功的登錄-用戶名或密碼錯(cuò)誤;
(c)帳戶被鎖定。

在這種情況下,這個(gè)動(dòng)作方法將使用三種可能的結(jié)果字符串被配置,并且有三個(gè)不同的視圖呈現(xiàn)的結(jié)果。我們已經(jīng)在前面的例子中看到了這個(gè)。

但是,Struts 2 沒有阻礙你使用 JSP 作為視圖技術(shù)。畢竟 MVC 范例的整個(gè)目的是保持層是獨(dú)立和高度可配置的。例如,對(duì)于一個(gè) Web2.0 的客戶端,你可能想要返回 XML 或 JSON 作為輸出。在這種情況下,你可以為 XML 或 JSON 創(chuàng)建一個(gè)新的結(jié)果類型,并且實(shí)現(xiàn)它。

Struts 自帶一些預(yù)定義的結(jié)果類型,無論什么我們已經(jīng)看到的都是默認(rèn)的結(jié)果類型 dispatcher,它是用來調(diào)度 JSP 頁面的。Struts 允許你為了視圖技術(shù)使用其它標(biāo)記語言來呈現(xiàn)結(jié)果和流行的選擇,包括 Velocity,Freemaker,XSLTTiles。

調(diào)度結(jié)果類型

調(diào)度 結(jié)果類型是默認(rèn)的類型,如果沒有其他的結(jié)果類型被指定,則使用它。它被用來在服務(wù)器上轉(zhuǎn)發(fā)到一個(gè) servlet,JSP,HTML 頁面,等等。它使用 RequestDispatcher.forward() 方法。

在我們前面的例子中,我們看到了 “shorthand” 版本,其中我們提供了 JSP 路徑作為結(jié)果標(biāo)簽的主體。

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

我們也可以在 元素內(nèi)使用一個(gè) 標(biāo)簽來指定 JSP 文件,如下所示:

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

我們也可以提供一個(gè) parse 參數(shù),默認(rèn)為 true。解析參數(shù)決定位置參數(shù)是否將被解析為 OGNL 表達(dá)式。

FreeMaker 結(jié)果類型

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

Hello World ${name}

在這里,上述文件是一個(gè)模板,其中 name 是使用已定義的動(dòng)作從外部傳遞的一個(gè)參數(shù)。你將會(huì)在 CLASSPATH 中保留這個(gè)文件。接下來,讓我們修改 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="com.tutorialspoint.Struts 2.HelloWorldAction"
         method="execute">
         <result name="success" type="freemarker">
            <param name="location">/hello.fm</param>
         </result>
      </action>      
   </package>
</struts>

讓我們保留 HelloWorldAction.java,HelloWorldAction.jsp 和 index.jsp 文件,因?yàn)槲覀冊(cè)?examples 章節(jié)中已經(jīng)創(chuàng)建了他們?,F(xiàn)在,在項(xiàng)目名稱上點(diǎn)擊右鍵,并且單擊 Export > WAR File 來創(chuàng)建一個(gè) War 文件。然后在 Tomcat 的 webapps 目錄下部署這個(gè) WAR。最后,啟動(dòng) Tomcat 服務(wù)器和嘗試訪問 URL http://localhost:8080/HelloWorldStruts 2/index.jsp. 將會(huì)給出下面的畫面:

http://wiki.jikexueyuan.com/project/struts-2/images/helloworldstruts4.jpg" alt="" />

輸入一個(gè)值 “Struts 2”,并提交該頁面,你應(yīng)該看到下一個(gè)頁面:

http://wiki.jikexueyuan.com/project/struts-2/images/helloworldstruts5.jpg" alt="" />

正如你所看到的,這是與 JSP 視圖完全一樣的,除了我們不依賴于使用 JSP 作為視圖技術(shù)。在這個(gè)例子中,我們已經(jīng)使用 Freemaker。

重定向結(jié)果類型

重定向的結(jié)果類型調(diào)用標(biāo)準(zhǔn)的 response.sendRedirect() 方法,使瀏覽器給指定的位置創(chuàng)建一個(gè)新的請(qǐng)求。

我們可以在 元素的元素體中或作為一個(gè) 元素來提供位置。重定向也支持 parse 參數(shù)。這兒是一個(gè)使用 XML 配置的例子:

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

因此,僅僅修改你的 struts.xml 文件來定義如上所提及的重定向類型,并且創(chuàng)建一個(gè)新的文件 NewWorld.jpg,無論何時(shí) hello 動(dòng)作返回 success,你將會(huì)重定向到那里。

上一篇:攔截器下一篇:主題/模板