关闭

Struts2 中result type属性说明

1069人阅读 评论(2) 收藏 举报
分类:

Struts2框架提供了大量的默认的结果类型,这些类型定义在struts2-core-版本号.jar文件下的Struts-default.xml文件中。首先看一下在struts-default.xml中对于result-type的定义:

<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" />
</result-types>
    chain:用来处理Action链,被跳转的action中仍能获取上个页面的值,如request信息.
    dispatcher:用来转向页面,通常处理JSP.
    freemaker:处理FreeMarker模板.
    httpheader:控制特殊HTTP行为的结果类型.
    redirect:重定向到一个URL,被跳转的页面中丢失传递的信息,如request.
    redirectAction:重定向到一个Action,跳转的页面中丢失传递的信息.
    stream:向浏览器发送InputSream对象,通常用来处理文件下载,还可用于返回AJAX数据.
    velocity:处理Velocity模板.
    xslt:处理XML/XLST模板.

    plainText:显示原始文件内容,例如文件源代码.

        Result的首要职责,是封装Action层到View层的跳转逻辑。之前我们已经反复提到,Struts2的Action是一个与Web容器无关的POJO。所以,在Action执行完毕之后,框架需要把代码的执行权重新交还给Web容器,并转向到相应的页面或者其他类型的View层。而这个跳转逻辑,就由Result来完成。这样,好处也是显而易见的,对Action屏蔽任何Web容器的相关信息,使得每个层次更加清晰。 
       View层的显示类型非常多,有最常见的JSP、当下非常流行的Freemarker/Velocity模板、Redirect到一个新的地址、文本流、图片流、甚至是JSON对象等等。所以Result层的独立存在,就能够对这些显示类型进行区分,并封装合理的跳转逻辑。 

重点说一下redirect和redirectAction的区别:

       (1)使用redirect需要后缀名,使用redirect-action可以不需要后缀名.

       (2)type="redirect"的值可以转到其它命名空间下的action,而redirect-action只能转到同一命名空下的action,因此它可以省略.do的后缀直接写action的名称.

参考

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:175222次
    • 积分:6361
    • 等级:
    • 排名:第3978名
    • 原创:135篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1578条
    博客专栏
    数据库

    文章:9篇

    阅读:10775
    UML

    文章:11篇

    阅读:11127
    最新评论