您的位置:首页 > 编程语言 > Java开发

Struts2 中result type属性说明

2016-08-29 22:47 369 查看

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的名称.

参考
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: