Struts2 Result 參數(shù)詳解
一個(gè)提交到服務(wù)器的處理通常可以分為兩個(gè)階段,第一個(gè)階段查詢服務(wù)器狀態(tài)(查詢或者更新數(shù)據(jù)庫(kù)),第二個(gè)階段選擇一個(gè)合適的結(jié)果頁(yè)面其返回給用戶(這里要講的Result的內(nèi)容)。
Struts2提供了對(duì)不同種類返回結(jié)果的支持,常見(jiàn)的有JSP,F(xiàn)reeMarker,Velocity等。
Struts2支持的不同類型的返回結(jié)果為:
名字 | 說(shuō)明 |
---|---|
Chain Result | 用來(lái)處理Action鏈 |
Dispatcher Result | 用來(lái)轉(zhuǎn)向頁(yè)面,通常處理JSP |
FreeMarker Result | 處理FreeMarker模板 |
HttpHeader Result | 用來(lái)控制特殊的Http行為 |
Redirect Result | 重定向到一個(gè)URL |
Redirect Action Result | 重定向到一個(gè)Action |
Stream Result | 向?yàn)g覽器發(fā)送InputSream對(duì)象,通常用來(lái)處理文件下載 |
Velocity Result | 處理Velocity模板 |
XLS Result | 處理XML/XLST模板 |
PlainText Result | 顯示原始文件內(nèi)容,例如文件源代碼 |
S2PLUGINS:Tiles Result | 結(jié)合Tile使用 |
另外第三方的Result類型還包括JasperReports Plugin,專門(mén)用來(lái)處理JasperReport類型的報(bào)表輸出。
在struts-default.xml文件中已經(jīng)有了對(duì)于所有類型Result的定義:
<result-types> <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/> <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/> <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/> <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/> <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/> <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/> <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/> <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/> <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/> <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" /> <!-- Deprecated name form scheduled for removal in Struts 2.1.0. The camelCase versions are preferred. See ww-1707 --> <result-type name="redirect-action" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/> <result-type name="plaintext" class="org.apache.struts2.dispatcher.PlainTextResult" /> </result-types>
從上述代碼中可以看出在不指定Result類型的時(shí)候使用dispatcher類型。
定義一個(gè)Result值,
<result name="success" type="dispatcher"> <param name="location">/ThankYou.jsp</param> </result>
由于type默認(rèn)值是dispatcher,所以這里不需要定義,另外name的默認(rèn)值為success所以這里也不需要定義。
上述代碼可以簡(jiǎn)寫(xiě)為:
<result> <param name="location">/ThankYou.jsp</param> </result>
另外location參數(shù)也可以直接卸載result標(biāo)簽內(nèi)部,所以上述代碼的最簡(jiǎn)單的寫(xiě)法為:
<result>/ThankYou.jsp</result>
我們也可以定義多個(gè)不同的Result
<action name="Hello"> <result>/hello/Result.jsp</result> <result name="error">/hello/Error.jsp</result> <result name="input">/hello/Input.jsp</result> </action>
上述代碼的含義為,名字為Hello的Action有三個(gè)返回結(jié)果,并且都是dispatcher類型(默認(rèn)類型), 這三個(gè)返回值的名字分別為 success(默認(rèn)值),error,input,對(duì)應(yīng)的頁(yè)面的路徑分別為/hello/Result.jsp,/hello/Error.jsp, /hello/Input.jsp。
有些時(shí)候我們需要一個(gè)定義在全局的Result,這個(gè)時(shí)候我們可以在package內(nèi)部定義全局的Result,例如:
<global-results> <result name="error">/Error.jsp</result> <result name="invalid.token">/Error.jsp</result> <result name="login" type="redirect-action">Logon!input</result> </global-results>
動(dòng)態(tài)返回結(jié)果
有些時(shí)候,只有當(dāng)Action執(zhí)行完璧的時(shí)候我們才知道要返回哪個(gè)結(jié)果,這個(gè)時(shí)候我們可以在Action內(nèi)部定義一個(gè)屬性,這個(gè)屬性用來(lái)存儲(chǔ)Action執(zhí)行完璧之后的Result值,例如:
private String nextAction; public String getNextAction() { return nextAction; }
在strutx.xml配置文件中,我們可以使用${nextAction}來(lái)引用到Action中的屬性,通過(guò)${nextAction}表示的內(nèi)容來(lái)動(dòng)態(tài)的返回結(jié)果,例如:
<action name="fragment" class="FragmentAction"> <result name="next" type="redirect-action">${nextAction}</result> </action>
上述Action的execute方法返回next的時(shí)候,還需要根據(jù)nextAction的屬性來(lái)判斷具體定位到哪個(gè)Action。
如果想轉(zhuǎn)發(fā)到另外個(gè)action可以設(shè)置type=chain 同時(shí)結(jié)果不加shtml
以上就是Struts2 Result 參數(shù)詳解的全部?jī)?nèi)容,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- struts2中action實(shí)現(xiàn)ModelDriven后無(wú)法返回json的解決方法
- 在Struts2中如何將父類屬性序列化為JSON格式的解決方法
- ajax+json+Struts2實(shí)現(xiàn)list傳遞實(shí)例講解
- struts2+jquery+json實(shí)現(xiàn)異步加載數(shù)據(jù)(自寫(xiě))
- Java的Struts2框架配合Ext JS處理JSON數(shù)據(jù)的使用示例
- SSH框架網(wǎng)上商城項(xiàng)目第7戰(zhàn)之整合Struts2和Json
- Struts2在打包json格式的懶加載異常問(wèn)題
- Struts2學(xué)習(xí)筆記(8)-Result常用類型
- Struts2學(xué)習(xí)筆記(9)-Result配置全局結(jié)果集
- Struts2 Result 返回JSON對(duì)象詳解
相關(guān)文章
windows 32位eclipse遠(yuǎn)程hadoop開(kāi)發(fā)環(huán)境搭建
這篇文章主要介紹了windows 32位eclipse遠(yuǎn)程hadoop開(kāi)發(fā)環(huán)境搭建的相關(guān)資料,需要的朋友可以參考下2016-07-07詳解Java LinkedHashMap與HashMap的使用
這篇文章主要通過(guò)幾個(gè)示例為大家詳細(xì)介紹了Java中LinkedHashMap與HashMap的常見(jiàn)使用和概述,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-10-10解決Springboot get請(qǐng)求是參數(shù)過(guò)長(zhǎng)的情況
這篇文章主要介紹了解決Springboot get請(qǐng)求是參數(shù)過(guò)長(zhǎng)的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09centos下編譯安裝mysql報(bào)錯(cuò)解決方案
今天在centos6.2下面源碼編譯安裝mysql的時(shí),在編譯mysql的時(shí)候報(bào)了一個(gè)蛋蛋的錯(cuò)誤,本文提供詳細(xì)解決方案2012-11-11原來(lái)Java接口多實(shí)現(xiàn)還可以這樣玩
JAVA中類不直接支持多繼承,因?yàn)闀?huì)出現(xiàn)調(diào)用的不確定性,所以JAVA將多繼承機(jī)制進(jìn)行改良,在JAVA中變成了多實(shí)現(xiàn),這篇文章主要給大家介紹了關(guān)于Java接口多實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2021-09-09關(guān)于synchronized、volatile、ReentrantLock的區(qū)別與對(duì)比
這篇文章主要介紹了關(guān)于synchronized、volatile、ReentrantLock的區(qū)別與對(duì)比,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04java模擬ajax訪問(wèn)另一個(gè)項(xiàng)目的controller代碼實(shí)例
今天小編就為大家分享一篇關(guān)于java模擬ajax訪問(wèn)另一個(gè)項(xiàng)目的controller代碼實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03Java 動(dòng)態(tài)生成類和實(shí)例, 并注入方法操作示例
這篇文章主要介紹了Java 動(dòng)態(tài)生成類和實(shí)例, 并注入方法操作,結(jié)合實(shí)例形式分析了Java 動(dòng)態(tài)生成類和實(shí)例以及動(dòng)態(tài)注入相關(guān)操作技巧,需要的朋友可以參考下2020-02-02