Struts2.0第05章Result_第1頁
Struts2.0第05章Result_第2頁
Struts2.0第05章Result_第3頁
Struts2.0第05章Result_第4頁
Struts2.0第05章Result_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精品文檔第五章 Result在探討Result之前,要向大家解釋清楚很容易弄糊涂的兩個(gè)概念:返回字符串和返回類型。在前面Action章節(jié),提到返回的字符串有五種,但那不是現(xiàn)在要討論的Result類型,那只是Xwork.xml配置文件中result標(biāo)簽name屬性的值。如下所示:<result name="success">/welcome.jsp</result>result標(biāo)簽還有一個(gè)type屬性,但之前并沒有顯式使用過該屬性,即一直使用該標(biāo)簽的默認(rèn)值Dispatcher。在本章中將介紹Result的幾種通用類型,如Dispatcher、Redir

2、ect、Chain以及一些其他模塊的幾種返回類型,將介紹Velocity、FreeMark、JasperReport三種模塊的返回類型。在介紹他們之前,先帶著讀者看看如何自定義Result,這樣會(huì)有助于理解Result的實(shí)質(zhì),為以后的學(xué)習(xí)打下根底。5.1自定義的Result在實(shí)現(xiàn)自定義的Result之前,先看看中關(guān)于Result的源代碼。Result是一個(gè)接口,在xwork-2.0.4.jar中包含了這個(gè)類。xwork-2.0.4.jar的源代碼Struts2.0.9中并沒有包括,所以要去opensymphony網(wǎng)站下載包,解壓之后,這個(gè)類的源代碼文件的路徑就是xwork-2.0.4-srcx

3、work-2.0.4srcjavacomopensymphonyxwork2Result.java。package com.opensymphony.xwork2;import java.io.Serializable;public interface Result extends Serializable public void execute(ActionInvocation invocation) throws Exception;可以看到,在Result的接口中只定義一個(gè)execute()方法,如果讀者想實(shí)現(xiàn)自己的Result就必須實(shí)現(xiàn)該接口。接下來通過一個(gè)例子來看看如何自己創(chuàng)立一個(gè)簡(jiǎn)

4、單的Result類型。我們給這個(gè)Result的類型取名為“test,通過這個(gè)Result類型來告訴Action返回的是何種返回字符串,我們使用一個(gè)隨機(jī)數(shù)來選擇返回的五個(gè)類型中的一種。注意:Result接口中的execute()方法沒有返回類型,因?yàn)镽esult就是執(zhí)行最后的任務(wù),沒有必要再返回其他數(shù)據(jù)了。而Action接口中的execute()方法返回的是String類型。實(shí)現(xiàn)自定義的Result前面已經(jīng)說過要自定義Result類型,就必須實(shí)現(xiàn)Result接口,由于例子比擬簡(jiǎn)單,只需要在execute()方法中添加幾行代碼。下面是一個(gè)完整的ResultType.java文件,它主要功能就是顯示

5、Action返回的類型。ResultType.javapackage example.result;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.Result;SuppressWarnings("serial")public class ResultType implements Result public void execute(ActionInvocation invocation) throws ExceptionString resultCode = i

6、nvocation.getResultCode();System.out.println("This time of Result code:"+resultCode);這個(gè)自定義的Result文件是在src的目錄下創(chuàng)立的。看上面的代碼很簡(jiǎn)單吧!在這個(gè)類里面只實(shí)現(xiàn)了一個(gè)Result接口中的execute()方法。如果有些函數(shù)讀者不理解,可以去查看相關(guān)文檔。在這里用到的是ActionInvocation這個(gè)類,然后調(diào)用里面的getResultCode()方法,這個(gè)函數(shù)返回的是在Action中執(zhí)行之后所返回的代碼,即前面提到的五種返回字符串類型之一,接下來是一句簡(jiǎn)單的輸出語句。

7、當(dāng)然這只是一個(gè)最簡(jiǎn)單的自定義Result類型,它不能顯示一個(gè)視圖,后面讀者將會(huì)看到Struts2集成的Result類型,它們的功能將會(huì)十分強(qiáng)大,在下一節(jié)讀者將會(huì)體會(huì)到。其實(shí),Struts2提供的Result類型已經(jīng)夠平時(shí)使用了,如果沒有特殊的要求,沒有必要使用自定義Result類型。知道Result的定義后,下面來看看Action的具體代碼。完整的代碼如下所示:TestAction.Javapackage example.result;import java.util.Random;import com.opensymphony.xwork2.ActionSupport;SuppressWar

8、nings("serial")public class TestAction extends ActionSupportpublic String execute() throws Exception/產(chǎn)生一個(gè)100以內(nèi)的整數(shù)int random = new Random().nextInt(100); /根據(jù)產(chǎn)生的隨機(jī)數(shù),分別返回五種不同的字符串if(random<=20)return SUCCESS;else if(random<=40)return ERROR;else if(random<=60)return LOGIN;else if(rando

9、m<=80)return NONE;elsereturn INPUT;這個(gè)文件和ResultType.java是放在同一個(gè)目錄下的。這個(gè)Action很簡(jiǎn)單,它先通過函數(shù)Random().nextInt(100)產(chǎn)生100以內(nèi)的隨機(jī)數(shù),然后再通過比擬來選擇不同返回類型,最后通過ResultType.java在控制臺(tái)上顯示出來。配置自己的Result當(dāng)然只有前面兩個(gè)文件是不能運(yùn)行自定義的Result的,需要做相應(yīng)的配置才能使用這個(gè)Result類型。Result的配置需要用到兩個(gè)文件web.xml和xwork.xml。下面是web.xml的完整代碼:web.xml<?xml versio

10、n="1.0" encoding="UTF-8"?><web-app id="WebApp_9" version="2.4" /xml/ns/j2ee" xmlns:xsi=" :/ /2001/XMLSchema-instance" xsi:schemaLocation=" :/java.sun /xml/ns/j2ee :/java.sun /xml/ns/j2ee/web-app_2_4.xsd"> <display-nam

11、e>Struts 2 RESULT</display-name> <filter> <filter-name>struts-cleanup</filter-name> <filter-class> </filter-class> </filter> <filter-mapping> <filter-name>struts-cleanup</filter-name> <url-pattern>/*</url-pattern> </filter

12、-mapping> <filter> <filter-name>struts2</filter-name> <filter-class> </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern></filter-mapping> <welcome-file-list> <w

13、elcome-file>index.html</welcome-file> </welcome-file-list></web-app>想使用自定義的Result就要在struts.xml中進(jìn)行配置,完整的struts.xml如下所示:struts.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-/Apache Software Foundation/DTD Struts Configuration

14、2.0/EN" " ://dtds/struts-2.0.dtd"><struts> <constant name="struts.devMode" value="true" /> <package name="default" extends="struts-default"> <result-types> <result-type name="test" class=&

15、quot;example.result.ResultType" default="true" /> <!- 配置test這個(gè)返回類型,同時(shí)指定test為默認(rèn)的返回類型 -> </result-types> <default-interceptor-ref name="completeStack" /> <action name="test" class="example.result.TestAction"> <!- 分別針對(duì)五種返回字符串配置返

16、回結(jié)果 -> <result name="success" type="test"></result> <result name="error" ></result> <result name="login" ></result> <result name="none" ></result> <result name="input">l</result>

17、; </action> </package></struts>在這里可以看到與配置Action的不同之處,上述代碼中加粗局部的代碼是Action配置沒有的。這里用了一個(gè)<result-types>標(biāo)簽,該標(biāo)簽用來標(biāo)志一個(gè)Result類型。該標(biāo)簽有三個(gè)屬性,一個(gè)是name,一個(gè)是class,還有就是default。前兩個(gè)是必須的,一個(gè)指明這個(gè)Result類型的名字,一個(gè)指出處理這個(gè)Result的類是哪個(gè)。最后的default屬性只有兩個(gè)值,默認(rèn)的情況下是false,即說明這個(gè)Result類型不是默認(rèn)的Result類型,使用的時(shí)候必須明確指明類型,如

18、<result name="success" type="test"></result>所示;假設(shè)自己賦值為true,如上述代碼所示,可以像<result name="error" ></result>這樣使用,無須再指明其返回類型,這也是常用的方式。web.xml,xwork.xml這兩個(gè)文件安放的位置跟一般的Action配置是一樣的,最后的目錄結(jié)構(gòu)如圖5-1所示。圖5-1 完整的目錄結(jié)構(gòu)這樣整個(gè)自定義的Result就算配置完成了。運(yùn)行測(cè)試Result沒有配置返回頁面,那么要怎么樣才能

19、看到結(jié)果和驗(yàn)證自定義的Result有沒有成功呢?實(shí)際上,可以在MyEclipse下面的控制臺(tái)視圖中查看運(yùn)行的結(jié)果。我們翻開瀏覽器,輸入 :/localhost:8080/ResultType/test.action,將會(huì)出現(xiàn)如圖5-2的畫面。圖5-2 成功的運(yùn)行界面顯然在瀏覽器中不會(huì)有任何顯示,但在MyEclipse的控制臺(tái)中會(huì)有顯示。多點(diǎn)擊幾次瀏覽器的刷新按鈕,這樣看到的效果會(huì)更明顯,如圖5-3所示:圖5-3 控制臺(tái)的信息如圖5-3所示,在最下面的五行顯示五種不同的返回類型,這就是這個(gè)簡(jiǎn)單的Result的功能了??梢钥闯鰜?,自定義Result是很簡(jiǎn)單的,如果結(jié)果想要返回一個(gè)頁面,就要在定義返

20、回類型的類中增加一個(gè)參數(shù)定義,在下面將介紹參數(shù)的作用。而且還要在配置返回結(jié)果的時(shí)候加上要返回的頁面,前面所有的例子都是有返回頁面。正如前面所說,根本不需要自己動(dòng)手去定義Result,Struts2已經(jīng)定義了許多種返回類型,這些返回類型在日常開發(fā)中足夠使用了。這節(jié)的目的主要是想通過一個(gè)簡(jiǎn)單的Result讓讀者明白整個(gè)Result的配置以及運(yùn)行方式,為后面理解Struts2提供的Result類型打下根底,便于以后的學(xué)習(xí)。5.2常用的Result我們首先了解一下Struts2是在什么地方定義以及配置Result返回類型的。將下載的.zip壓縮包解壓之后,在路徑struts-2.0.9-allstru

21、ts-2.0.9srccoresrcmainresources下有一個(gè)struts-default.xml文件,所有的Result類型都是在這里進(jìn)行配置,在這里能看到對(duì)應(yīng)Result類型的源代碼定義在什么地方。下面是這個(gè)文件中關(guān)于Result類型配置局部的代碼:struts-default.xml/*省略語句*/ <result-types> <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/> <result-type n

22、ame="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/> <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/> <result-type name=" header" class=&quo

23、t;org.apache.struts2.dispatcher. HeaderResult"/> <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/> <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/&g

24、t; <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.X

25、SLTResult"/> <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&

26、quot; class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/> <result-type name="plaintext" class="org.apache.struts2.dispatcher.PlainTextResult" /></result-types>/*省略語句*/ 從上面的代碼可以明顯看到,它與自己定義的Result類型配置是完全一樣的。文中粗體表示就是各種Struts2定義的Result類型了,至于具體

27、每個(gè)類型表示什么,可以參考表5-1,表中列出的也只是一些能用到的局部而并非全部,其他的Result類型請(qǐng)讀者參考Struts2官方文檔。上述配置代碼中,屬性class是各個(gè)Result類型對(duì)應(yīng)的類文件。在接下來的章節(jié)中,對(duì)幾個(gè)常用的Result的源代碼進(jìn)行一些解析,這樣就能進(jìn)一步了解Result的工作流程以及它的內(nèi)涵。表5-1 Result類型列表Result類型Result對(duì)應(yīng)的功能Dispatcher Result用于JSP的整合Redirect Result用于直接跳轉(zhuǎn)到例外的URLChain Result用于 Action ChainingXSL Result用于 XML/XSLT 整

28、合 Header Result用于控制特殊的 行為Stream Result用于向?yàn)g覽器返回一個(gè)InputStream (一般用于文件下載)PlainText Result用于顯示某個(gè)頁面的原始的文本 (例如 jsp, html 等)Redirect Action Result用于直接跳轉(zhuǎn)到另外的actionVelocity Result用于Velocity的整合FreeMarker Result用于FreeMarker的整合JasperReports Result用于JasperReports的整合下面就開始進(jìn)入探討Result類型之旅了。我們會(huì)介紹其中的三種常用Result類型以及其他三種

29、關(guān)于視圖的Result類型。 Dispatcher要想真正理解Dispatcher的作用,應(yīng)該首先通過struts-default.xml找到Dispatcher 對(duì)應(yīng)的類文件,查看其源代碼。在目錄Struts2-.0.9Struts2-src-.0.9comopensymphonyStruts2dispatcher下可以找到一個(gè)ServletDispatcherResult.java文件。下面是截取ServletDispatcherResult.java的局部代碼:ServletDispatcherResult.java/*省略語句*/ public class ServletDispatc

30、herResult extends StrutsResultSupport /*省略語句*/private static final Log log = LogFactory.getLog(ServletDispatcherResult.class);/*省略局部方法*/實(shí)現(xiàn)從父類繼承的方法 public void doExecute(String finalLocation, ActionInvocation invocation) throws Exception if (log.isDebugEnabled() log.debug("Forwarding to location

31、 " + finalLocation); PageContext pageContext = ServletActionContext.getPageContext(); if (pageContext != null) pageContext.include(finalLocation); else ServletRequest request = ServletActionContext.getRequest(); ServletResponse response = ServletActionContext.getResponse(); RequestDispatcher di

32、spatcher = request.getRequestDispatcher(finalLocation); if (dispatcher = null) /給出錯(cuò)誤的提示信息 response.sendError(404, "result '" + finalLocation + "' not found"); return; if(!response.isCommitted()&&(request.getAttribute("javax.servlet.include.servlet_path")

33、 = null) /設(shè)置request中元素的值 request.setAttribute("struts.view_uri", finalLocation); request.setAttribute("struts.request_uri",request.getRequestURI();dispatcher.forward(request, response); else dispatcher.include(request, response); 在前面自定義Result的時(shí)候說過,任何Result類型都需要實(shí)現(xiàn)Result接口的execute(

34、)方法,但是在此處并未實(shí)現(xiàn),為什么呢?在上述代碼中的粗體局部可以看到ServletDispatcherResult類是繼承StrutsResultSupport類的,那再分析一下StrutsResultSupport這個(gè)類,在與ServletDispatcherResult.java文件相同目錄下可以找到StrutsResultSupport.java文件,其局部代碼如下:StrutsResultSupport.java/*省略語句*/ /這個(gè)類實(shí)現(xiàn)了Result接口public abstract class Struts2ResultSupport implements Result, St

35、rutsStatics private static final Log _log = LogFactory.getLog(Struts2ResultSupport.class); public static final String DEFAULT_PARAM = "location" private boolean parse; private boolean encode; private String location; private String lastFinalLocation; /*省略一些方法*/public void setLocation(Strin

36、g location) this.location = location;public String getLastFinalLocation() return lastFinalLocation; public void setParse(boolean parse) this.parse = parse; public void setEncode(boolean encode) this.encode = encode;public void execute(ActionInvocation invocation) throws Exception lastFinalLocation =

37、 conditionalParse(location, invocation); doExecute(conditionalParse(location, invocation), invocation); protected String conditionalParse(String param, ActionInvocation invocation) /*省略語句*/ protected abstract void doExecute(String finalLocation, ActionInvocation invocation) throws Exception;看了Struts

38、ResultSupport.java文件,想必大家就很明白為什么ServletDispatcherResult類沒有實(shí)現(xiàn)Result接口的execute()方法了。文中粗體所示的局部說明StrutsResultSupport類是一個(gè)抽象類,在它里面實(shí)現(xiàn)了execute()方法,不過它的實(shí)現(xiàn)是調(diào)用一個(gè)doExecute()方法。在繼承StrutsResultSupport類的時(shí)候,只要實(shí)現(xiàn)doExecute()方法就能到達(dá)對(duì)Result接口execute()方法的實(shí)現(xiàn)!所以在ServletDispatcherResult.java文件中只有這一個(gè)方法。下面來看看Result的參數(shù),就是在配置st

39、ruts.xml文件時(shí)<result>標(biāo)簽對(duì)應(yīng)的參數(shù)。在Struts2ResultSupport.java文件中用粗體表示的還有一些代碼:public static final String DEFAULT_PARAM = "location"protected boolean parse ;protected String location;這三句代碼就定義了Dispatcher的兩個(gè)參數(shù),各自功能如下:n location (默認(rèn)):執(zhí)行后轉(zhuǎn)到的地方(如jsp頁面)。n parse:這個(gè)值在構(gòu)造函數(shù)中已經(jīng)默認(rèn)為true。如果設(shè)置為false,location

40、參數(shù)就不會(huì)被解析為Ognl表達(dá)式。location對(duì)應(yīng)的就是自己編寫的頁面的地址,如果要返回一個(gè)頁面就得擁有這個(gè)參數(shù),否那么定義的返回類型就不能返回到指定的頁面。在以后介紹的每一種Result類型的時(shí)候,都會(huì)有這個(gè)DEFAULT_PARAM靜態(tài)字符串變量。這個(gè)變量指明location是默認(rèn)的參數(shù),這就讓使用者能夠更方便的使用這種類型。清楚了返回類型怎么實(shí)現(xiàn)之后,接下來要考慮如何如在Action中用到它們。首先回憶一下第一個(gè)Action的例子,在xwork.xml配置文件里有這些代碼:/*省略語句*/ <include file="struts-default.xml"

41、 />/*省略語句*/ <result name="success">/welcome.jsp</result>/*省略語句*/ 在struts.xml中將struts-default.xml文件包含進(jìn)來,就是為了可以使用在struts-default.xml中定義的各種Result類型。再看<result>標(biāo)簽,它只有一個(gè)name屬性,沒有type屬性的指定也沒有參數(shù)的指定,為什么可以這樣?它怎么知道選擇何種Result類型?原來在struts-default.xml中是這樣定義Dispatcher的:<result-typ

42、e name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>原來已經(jīng)定義default為true了,而且其他的Result都沒有這個(gè)定義。location參數(shù),因?yàn)橛辛四J(rèn)的DEFAULT_PARAM靜態(tài)字符串來表示,所以location參數(shù)也可以不需要顯式說明。那么對(duì)于上面的Result標(biāo)簽更完整的配置應(yīng)該是這樣的<result name="success" type

43、="dispatcher"><param name="location">/welcome.jsp</param></result>至于parse參數(shù),它是一個(gè)布爾型的,默認(rèn)值為true,它是用來解析參數(shù)location的,具體的Ognl局部請(qǐng)參看以后的關(guān)于表達(dá)式語言的章節(jié)。弄清楚上述問題之后,現(xiàn)在重點(diǎn)來看ServletDispatcherResult.java中的doExecute()方法,弄清楚它的工作流程。ServletDispatcherResult.java/*省略語句*/ if (log.isDebu

44、gEnabled() log.debug("Forwarding to location " + finalLocation); PageContext pageContext = ServletActionContext.getPageContext(); if (pageContext != null) pageContext.include(finalLocation); else ServletRequest request = ServletActionContext.getRequest(); ServletResponse response = Servlet

45、ActionContext.getResponse(); RequestDispatcher dispatcherrequest.getRequestDispatcher(finalLocation); if (dispatcher = null) /404錯(cuò)誤代碼對(duì)應(yīng)的錯(cuò)誤信息的輸出 response.sendError(404, "result '" + finalLocation + "' not found"); return; if(!response.isCommitted()&&(request.getAtt

46、ribute("javax.servlet.include.servlet_path") = null) /設(shè)置request中元素的值 request.setAttribute("struts.view_uri", finalLocation); request.setAttribute("struts.request_uri",request.getRequestURI();dispatcher.forward(request, response); else dispatcher.include(request, respons

47、e); 上面是doExecute()方法的具體實(shí)現(xiàn),可以從粗體局部看出這個(gè)Result有三種執(zhí)行方式:n 如果在一個(gè)JSP的范圍內(nèi)(PageContext對(duì)象可用),PageContext的include(String)方法會(huì)被調(diào)用。n 如果沒有PageContext對(duì)象,并且也不在任何形式的include中(在request的屬性中沒有"javax.servlet.include.servlet_path"),那么調(diào)用RequestDispatcher的forward方法。n 否那么調(diào)用RequestDispatcher的include方法。還可以看到,如果dispatc

48、her=null的話,會(huì)返回404代碼錯(cuò)誤。所以以后在使用Dispatcher的時(shí)候遇到404錯(cuò)誤的時(shí)候,就應(yīng)該知道是返回對(duì)應(yīng)的頁面地址或者Action找不到的問題。至于具體的類的含義以及方法是干什么的,讀者可以自己去查閱servlet的API文檔。這就是整個(gè)Dispatcher Result的流程了。下面用一個(gè)流程圖來概括一下,如圖5-4所示。圖5-4 Dispatcher Result的流程這一節(jié)因?yàn)槭堑谝淮沃v解Struts2定義的Result類型,所以內(nèi)容比擬多。這個(gè)小節(jié)對(duì)源代碼進(jìn)行了探討,介紹了參數(shù),執(zhí)行方式等內(nèi)容,讓讀者完全理解Dispatcher Result。后面因?yàn)橛辛诉@節(jié)的根

49、底,Result的講解將比擬簡(jiǎn)單了。 RedirectRedirect,即重定向,Action如果配置這種返回類型,那么就可以有三種不同的返回效果,分別是返回到頁面、連接到另一個(gè)Action、還可以連接到一個(gè)網(wǎng)址。有了前面Dispatcher Result的根底,Redirect Result理解起來就比擬容易了。讓我們看看Redirect Result的源代碼是如何實(shí)現(xiàn)的。首先看Redirect在struts-default.xml中的配置:<result-type name="redirect" class="org.apache.struts2.dis

50、patcher.ServletRedirectResult"/>這就是Redirect在struts-default.xml中的配置,與Dispatcher的不同就是沒有default屬性,通過上一小節(jié)可以知道,Redirect并不是默認(rèn)的,使用的時(shí)候必須指明類型屬性type=redirect。在ServletDispatcherResult.java文件路徑下可以找到ServletRedirectResult.java文件,其代碼如下:ServletRedirectResult.java/*省略語句*/ public class ServletRedirectResult e

51、xtends StrutsResultSupport private static final Log log = LogFactory.getLog(ServletRedirectResult.class);/*省略局部代碼*/ protected boolean prependServletContext = true; public void setPrependServletContext(boolean prependServletContext) this.prependServletContext = prependServletContext; protected void d

52、oExecute(String finalLocation, ActionInvocation invocation) throws Exception /*省略語句*/ response.sendRedirect(finalLocation); /*省略語句*/ 在這里只是簡(jiǎn)單的截取一些代碼片斷,粗體局部顯示了它和Dispatcher一樣都是繼承StrutsResultSupport類的,都實(shí)現(xiàn)了doExecute()方法。有興趣的讀者可以把這段完整的源代碼找出來研究一下,在這里就不再贅訴了。同樣,Redirect也有自己的參數(shù)。n location(默認(rèn)):action執(zhí)行后跳轉(zhuǎn)的地址。n

53、 parse:這個(gè)值在構(gòu)造函數(shù)中已經(jīng)默認(rèn)為true。如果設(shè)置為false,location參數(shù)不會(huì)被當(dāng)作Ognl表達(dá)式解析。參數(shù)和Dispatcher是一樣的,不過這里的location可以是一般的JSP頁面,可以是一個(gè)Action,還可以是一個(gè)其他的網(wǎng)址譬如: :/ 。這就是Redirect被稱為重定向的原因,可以定向到不同的方式。下面通過一個(gè)簡(jiǎn)單的例子來了解一下Redirect。在一個(gè)工程里面定義三個(gè)Action,他們的Result的類型都是redirect,但是他們重定向的對(duì)象不同,一個(gè)為一般的JSP頁面,一個(gè)為Action,一個(gè)是一個(gè)網(wǎng)址URL??梢园驯緯婚_始創(chuàng)立

54、的第一個(gè)Action工程拿出來使用,在同一個(gè)包中再添加兩個(gè)Action,這兩個(gè)Action只返回SUCCESS,不做其他事情。下面是三個(gè)Action的對(duì)應(yīng)源代碼:helloworld.javapackage example;import com.opensymphony.xwork2.ActionSupport;SuppressWarnings("serial")public class helloworld extends ActionSupportpublic String message;public String name;public String execute

55、()if ( name = null | "".equals(name)|"w".equals(name)message="Blank names or 'w' not allowed"return INPUT;message = "hello "+name+"!n"return SUCCESS;public String getMessage()return message;public void setName(String name) = name;pub

56、lic String getName()return name;這就是第二章實(shí)現(xiàn)的第一個(gè)Action helloworld。下面是添加的兩個(gè)Action:OtherTest.javapackage example;import com.opensymphony.xwork2.ActionSupport;public class OtherTest extends ActionSupportpublic String execute()return SUCCESS;Test.javapackage example;import com.opensymphony.xwork2.ActionSupp

57、ort;public class Test extends ActionSupportpublic String execute()return SUCCESS;這兩個(gè)Action的execute()方法只是返回SUCCESS,通過這三個(gè)Action來試驗(yàn)一下Redirect這種返回類型的三種不同返回形式。最后再看struts.xml的配置代碼:struts.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-/Apache Software F

58、oundation/DTD Struts Configuration 2.0/EN" " ://dtds/struts-2.0.dtd"><struts> <constant name="struts.devMode" value="true" /> <package name="default" extends="struts-default"><action name="helloworld" class="example.helloworld"><interceptor-ref name="completeStack" /> <!-返回到自定義的頁面-><result name="success" type="redirect"&g

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論