Struts2 Result type全部所有类型配置详解

struts | 2019-09-13 10:02:39

Struts2 Result type全部所有类型 :


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

处理 FreeMarker 模板

org.apache.struts2.views.freemarker.FreemarkerResult

httpheader

控制特殊 http 行为的结果类型

org.apache.struts2.dispatcher.HttpHeaderResult

stream

向浏览器发送 InputSream 对象,通常用来处理文件下载,还可用于返回 AJAX数据。

org.apache.struts2.dispatcher.StreamResult

velocity

处理 Velocity 模板

org.apache.struts2.dispatcher.VelocityResult

xslt   

   处理 XML/XLST 模板

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元素的内容是属性的值。例如:

<result name=“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 String DEFAULT_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 name="success" >  
     <param name="location">foo.jsp</param>
    <param name="parse">false</param><!--不解析OGNL-->
</result>

示例(2)、

<package name="passingRequestParameters"extends="struts-default"namespace="/passingRequestParameters">  
   <-- Passparameters (reportType, width and height),重定向到Url并且传参 ,如果参数是中文:请参看最底部例子-->  
   <!--  
     The redirect-action url generated will be : 
/genReport/generateReport.jsp?reportType=pie&width=100&height=100  
   -->  
   <actionname="gatherReportInfo" class="...">  
      <resultname="showReportResult" type="redirect">  
         <param name="location">generateReport.jsp</param>  
         <param name="namespace">/genReport</param>  
         <param name="reportType">pie</param>  
         <param name="width">100</param> 
         <param name="height">100</param> 
     </result>  
  </action>  
</package>

3、redirectAction结果类型(重定向到一个Action)
他经常用于防止表单重复提交,比方说在增加完用户之后要显示列表 
redirectAction结果类型的实现类是org.apache.struts2.dispatcher.ServletActionRedirectResult,该类是ServletRedirectResult的子类,因此我们也就可以判断出redirectAction结果类型和redirect结果类型的后台工作原理是一样的,即都是利用HttpServletResponse的sendRedirect方法将请求重定向到指定的URL。


示例


<package name="public"extends="struts-default">  
    <action name="login"class="...">  
        <!--Redirect to another namespace 重定向到不同命名空间下的    action --> 
        <result type="redirectAction">  
           <param name="actionName">dashboard</param> 
           <param name="namespace">/secure</param> 
        </result> 
   </action> 
</package> 
 
<package name="secure"extends="struts-default" namespace="/secure">  
    <-- Redirectto an action in the same namespace,重定向到同一命名空间下的action -->
    <action name="dashboard" class="...">  
       <result>dashboard.jsp</result> 
        <result name="error"type="redirectAction">error</result> 
   </action> 
     <action name="error" class="...">  
       <result>error.jsp</result>
    </action> 
</package> 
 
<package name="passingRequestParameters"extends="struts-default"namespace="/passingRequestParameters">  
   <-- Passparameters (reportType, width and height),重定向到Action并且传参,如果参数是中文:请参看最底部例子 --> 
   <!--  
   TheredirectAction url generated will be :   
/genReport/generateReport.action?reportType=pie&width=100&height=100 
    --> 
   <action name="gatherReportInfo" class="...">  
      <result name="showReportResult" type="redirectAction">  
         <param name="actionName">generateReport</param> 
         <param name="namespace">/genReport</param> 
         <param name="reportType">pie</param> 
         <param name="width">100</param>
         <param name="height">100</param>
         <param name="empty"></param>
         <param name="supressEmptyParameters">true</param> 
     </result> 
  </action> 
</package>


4、链接类型  result:chain(从一个Action转发到另一个Action)
chain,它是一个琏式的,是从一个Action转发另外一个Aciton,写action的名字即可,并把前一个Action的请求参数值和自己的属性传给下一个Action,前提是设置了getting方法。

chain结果类型有4个属性,分别是:

    actionName (default) - the name of the action that will be chained to

    namespace - used to determine which namespace the Action is in that we're chaining. If namespace is null, this defaults to the current namespace

    method - used to specify another method on target action to be invoked. If null, this defaults to execute method

    skipActions - (optional) the list of comma separated action names for the actions that could be chained to

示例



<package name="public"extends="struts-default">  
    <!-- Chain creatAccount to login, using the default parameter ,链接到同一命名空间下的Action,--> 
    <action name="createAccount" class="...">  
        <result type="chain">login</result>
   </action> 
    <actionname="login" class="...">  
        <!--Chain to another namespace --> 
        <result type="chain">  
           <param name="actionName">dashboard</param> 
           <param name="namespace">/secure</param> 
       </result> 
   </action> 
</package> 
<package name="secure" extends="struts-default"namespace="/secure">  
    <actionname="dashboard" class="...">  
       <result>dashboard.jsp</result> 
   </action> 
</package>

5、HttpHeader Result:HttpHeader(用来控制特殊的Http行为)
  httpheader结果类型很少使用到,它实际上是返回一个HTTP响应的头信息
示例:


<result name="success"type="httpheader">  
     <paramname="status">204</param>
     <paramname="headers.a">a custom header value</param>      <paramname="headers.b">another custom header value</param> 
    </result> 
<result name="proxyRequired"type="httpheader">  
   <paramname="error">305</param>
   <paramname="errorMessage">this action must be accessed through aprozy</param> 
</result>

6、Stream Result(向浏览器发送InputSream对象,通常用来处理文件下载)

<result name="success"type="stream">  
  <param name="contentType">image/jpeg</param> 
  <param name="inputName">imageStream</param> 
  <param name="contentDisposition">attachment;filename="document.pdf"</param>  
  <param name="bufferSize">1024</param> 
</result>

7、PlainText Result(显示原始文件内容,例如文件源代码)

<action name="displayJspRawContent"> 
  <result type="plaintext">/myJspFile.jsp</result> 
  </action>  
<action name="displayJspRawContent"> 
  <result type="plaintext">  
     <param name="location">/myJspFile.jsp</param> 
     <param name="charSet">UTF-8</param>
  </result> 
</action>

若仅设置type="plainText"的话,页面中显示中文时会乱码,这时就可以借助它的charSet属性以解决中文显示时的乱码问题,如果不设置charSet属性,反而去配置struts.i18n.encoding全局属性,是不能解决问题的
设置charSet属性的目的就是让JSP页面的编码与明文显示时的编码一致。


8、Velocity Result(处理Velocity模板)

<result name="success"type="velocity">  
    <paramname="location">foo.vm</param> 
  </result>

9、XLS Result(处理XML/XLST模板)

<result name="success" type="xslt">  
  <paramname="location">foo.xslt</param> 
  <paramname="matchingPattern">^/result/[^/*][        DISCUZ_CODE_684        ]lt;/param> 
  <paramname="excludingPattern">.*(hugeCollection).*</param> 
</result>

10、 FreeMarkerResult  (处理FreeMarker模板)

<result name="success"type="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:importAttribute name="title"scope="request"/>  
<html> 
   <head><title><tiles:getAsStringname="title"/></title></head>  
<body> 
   <tiles:insertAttribute name="header"/>  
      <pid="body">  
        <tiles:insertAttributename="body"/>  
    </p> 
    <p>Noticethat this is a layout made in JSP</p>
</body> 
</html>



登录后即可回复 登录 | 注册
    
关注编程学问公众号