Struts2中 Result类型配置详解(转载)

一个result代表了一个可能的输出。当Action类的方法执行完成时,它返回一个字符串类型的结果码,框架根据这个结果码选择对应的result,向用户输出。在com.opensymphony.xwork2.Action接口中定义了一组标准的结果代码,可供开发人员使用,当然了只有我们的action继承ActionSupport这个类才可以使用下面的结果代码,如下所示:public interface Action{ publicstatic final String SUCCESS = “success”; publicstatic final String NONE = “none”; publicstatic final String ERROR = “error”; publicstatic final String INPUT = “input”; publicstatic final String LOGIN = “login”;} 其中 Struts2应用在运行过程中若发现addFieldError()中有信息或者类型转换失败或着输入校验失败等情况那么它会自动跳转到name为input的<result/>,然后转到INPUT所对应的页面若JSP页面中表单是用普通<form>编写的,发生错误而返回该页面时,则原数据将消失若JSP页面中表单是用<s:form/>编写的,发生错误而返回该页面时,则原数据仍存在若没有提供name值为input的<result/>,那么发生错误时,将直接在浏览器中提示404错误 除了这些预定义的结果码外,开发人员也可以定义其它的结果码来满足自身应用程序的需要。Result配置由两部分组成:一部分是result映射,另一部分是result类型。下面我们分别对这两部分进行介绍。一、配置 result映射在result映射的配置中,在指定实际资源的位置时,可以使用绝对路径,也可以使用相对路径。绝对路径以斜杠(/)开头,相对于当前的Web应用程序的上下文路径;相对路径不以斜杠(/)开头,相对于当前执行的action的路径,也就是namespace指定的路径。例如: <packageextends=”struts-default” namespace=”/admin”><action><result>success.jsp</result><result>/error.jsp</result></action></package>如果当前Web应用程序的上下文路径是/Shop,那么请求/Shop/admin/login.action,执行成功后,转向的页面路径为:/Shop/admin/success.jsp;执行失败后,转向的页面路径为/Shop/error.jsp.二、result结果类型详解

type 所有类型 :(在struts2-core.jar/struts-default.xml中可以找到)

Type类型值

作用说明

对应类

chain

用来处理Action 链

com.opensymphony.xwork2.ActionChainResult

dispatcher(默认值)

用来转向页面,通常处理 JSP

org.apache.struts2.dispatcher.ServletDispatcherResult

redirect

重定向到一个URL

org.apache.struts2.dispatcher.ServletRedirectResult

redirectAction

重定向到一个 Action

org.apache.struts2.dispatcher.ServletActionRedirectResult

plainText

显示源文件内容,如文件源码

org.apache.struts2.dispatcher.PlainTextResult

freemarker

org.apache.struts2.views.freemarker.FreemarkerResult

httpheader

org.apache.struts2.dispatcher.HttpHeaderResult

stream

org.apache.struts2.dispatcher.StreamResult

velocity

org.apache.struts2.dispatcher.VelocityResult

xslt

org.apache.struts2.views.xslt.XSLTResult

1、dispatcher结果类型 Struts2在后台使用Servlet API的RequestDispatcher来转发请求,因此在用户的整个请求/响应过程中,目标Servlet/JSP接收到的request/response对象,与最初的Servlet/JSP相同。 Dispatcher结果类型的实现是org.apache.struts2.dispatcher.ServletDispatcherResult,该类的二个属性(property):location和parse,这两个属性可以通过struts.xml配置文件中的result元素的param子元素来设置。param元素的name属性指定结果类型实现类的属性名,param元素的内容是属性的值。例如: <resultname=“success”type=“dispatcher”><param name=“location”>/success.jsp</param><param name=“parse”>true</param></result> 说明: A、location参数用于指定action执行完毕后要转向的目标资源,parse属性是一个布尔类型的值,如果为true,则解析location参数中的OGNL表达式;如果为false,则不解析。parse属性的默认值就是true.location参数是默认的参数,在所有的Result实现类中,都定义了一个字符串类型的DEFAULT_PARAM静态常量,专门用于指定默认的参数名。DEFAULT_PARAM常量的定义:public static final StringDEFAULT_PARAM=“location”; B、在设置location参数时,可以在参数值中使用OGNL表达式。<action name=“viewNews”class=“com.ibm.ViewNewsAction”<result name=“success”type=“dispatcher”><!–如果参数是中文:请参看最底部例子–> <param name=“location”>/viewNews.jsp?id=${id}</param><param name=“parse”>true</param></result></action>考虑到默认值的使用(dispatcher和location都是默认值),上述可以简化为:<action name=“viewNews”class=“com.ibm.ViewNewsAction”><result name=“success”>viewNews.jsp?id=${id}</result></action>2、redirect结果类型(重定向到一个Url,也可以是Action或一个页面)Redirect结果类型在后台使用HttpServletResponse的sendRedirect方法将请求重定向到指定的URL,它的实现类是org.apache.struts2.dispatcher.ServletRedirectResult.该类同样有二个属性(property):location和parse,在使用redirect结果类型的场景中,用户要完成一次与服务器之间的交互,浏览器需要完成两次请求,因此第一次请求中的数据在第二次请求中是不可用的,这意味在目标资源中是不能访问action实例、action错误以及错误等。如果有某些数据需要在目标资源中访问, i、一种方式是将数据保存到Session中, ii、另一种方式是通过请求参数来传递数据。示例(1)、<result type=”redirect”><param>foo.jsp</param><param>false</param><!–不解析OGNL–></result>示例(2)、 <packageextends=”struts-default”namespace=”/passingRequestParameters”> <– Passparameters (reportType, widthand height),重定向到Url并且传参 ,如果参数是中文:请参看最底部例子–><!– The redirect-action url generated will be:/genReport/generateReport.jsp?reportType=pie&width=100&height=100–><actionname=”gatherReportInfo”><resultname=”showReportResult”type=”redirect”><param>generateReport.jsp</param><param>/genReport</param><param>pie</param><param>100</param><param>100</param></result></action></package>3、redirectAction结果类型(重定向到一个Action) 他经常用于防止表单重复提交,比方说在增加完用户之后要显示列表redirectAction结果类型的实现类是org.apache.struts2.dispatcher.ServletActionRedirectResult,该类是ServletRedirectResult的子类,因此我们也就可以判断出redirectAction结果类型和redirect结果类型的后台工作原理是一样的,即都是利用HttpServletResponse的sendRedirect方法将请求重定向到指定的URL。示例、 <packageextends=”struts-default”><actionclass=”…”><!–Redirect to anothernamespace重定向到不同命名空间下的action –><resulttype=”redirectAction”><param name=”actionName”>dashboard</param><param name=”namespace”>/secure</param></result></action></package><packageextends=”struts-default”namespace=”/secure”> <– Redirectto an action in the samenamespace,重定向到同一命名空间下的action –><action><result>dashboard.jsp</result><resulttype=”redirectAction”>error</result></action><action><result>error.jsp</result></action></package><packageextends=”struts-default”namespace=”/passingRequestParameters”><– Passparameters (reportType, width andheight),重定向到Action并且传参,如果参数是中文:请参看最底部例子–><!– TheredirectAction urlgenerated will be:/genReport/generateReport.action?reportType=pie&width=100&height=100 –> <action><result type=”redirectAction”><param>generateReport</param><param>/genReport</param><param>pie</param><param>100</param><param>100</param><param></param><param>true</param></result></action></package>4、链接类型result:chain(从一个Action转发到另一个Action) chain结果类型有4个属性,分别是:actionName (default) – the name of the action that will bechained tonamespace – used to determine which namespace the Action isin that we’re chaining. If namespace is null, this defaults to thecurrent namespacemethod – used to specify another method on target action tobe invoked. If null, this defaults to execute methodskipActions – (optional) the list of comma separated actionnames for the actions that could be chained to示例、<packageextends=”struts-default”> <!– ChaincreatAccount to login, using the default parameter,链接到同一命名空间下的Action,–><action><resulttype=”chain”>login</result></action><actionname=”login”><!–Chain to anothernamespace –><resulttype=”chain”><param>dashboard</param><param>/secure</param></result></action></package><packageextends=”struts-default”namespace=”/secure”><actionname=”dashboard”><result>dashboard.jsp</result></action></package>5、HttpHeaderResult:HttpHeader(用来控制特殊的Http行为) httpheader结果类型很少使用到,它实际上是返回一个HTTP响应的头信息示例:<resulttype=”httpheader”><paramname=”status”>204</param><paramname=”headers.a”>a customheadervalue</param><paramname=”headers.b”>another customheadervalue</param></result><resulttype=”httpheader”><paramname=”error”>305</param><paramname=”errorMessage”>this actionmust be accessed throughaprozy</param></result>6、StreamResult(向浏览器发送InputSream对象,通常用来处理文件下载) <resulttype=”stream”> <param>image/jpeg</param> <param>imageStream</param> <param>attachment;filename=”document.pdf”</param> <param>1024</param></result>7、PlainTextResult(显示原始文件内容,例如文件源代码) <action> <resulttype=”plaintext”>/myJspFile.jsp</result></action><action> <resulttype=”plaintext”><param>/myJspFile.jsp</param><param>UTF-8</param></result></action>若仅设置type=”plainText”的话,页面中显示中文时会乱码,这时就可以借助它的charSet属性以解决中文显示时的乱码问题,,如果不设置charSet属性,反而去配置struts.i18n.encoding全局属性,是不能解决问题的设置charSet属性的目的就是让JSP页面的编码与明文显示时的编码一致8、VelocityResult(处理Velocity模板) <resulttype=”velocity”><paramname=”location”>foo.vm</param></result>9、XLSResult(处理XML/XLST模板) <resulttype=”xslt”><paramname=”location”>foo.xslt</param><paramname=”matchingPattern”>^/result/[^/*]$</param><paramname=”excludingPattern”>.*(hugeCollection).*</param></result>10、FreeMarkerResult(处理FreeMarker模板) <resulttype=”freemarker”>foo.ftl</result>附、另外第三方的Result类型还包括JasperReportsPlugin,专门用来处理JasperReport类型的报表输出。<%@ tagliburi=”http://tiles.apache.org/tags-tiles”prefix=”tiles”%><%@ taglib prefix=”s”uri=”/struts-tags”%> <%– Show usage; Used in Header–%><tiles:importAttributescope=”request”/><html><head><title><tiles:getAsStringname=”title”/></title></head><body><tiles:insertAttribute/><pid=”body”><tiles:insertAttributename=”body”/></p><p>Noticethat this is a layout madein JSP</p></body></html>

注意!!!!.传递中文

记住永远不要在浏览器的地址栏中传递中文。在传递中文前先进行编码

A.action中

接受失败等于放松自己高压的心理,

Struts2中 Result类型配置详解(转载)

相关文章:

你感兴趣的文章:

标签云: