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