冰梦无痕吧 关注:11贴子:66
  • 1回复贴,共1

struts2 strus.xml中result类型及含义

只看楼主收藏回复

一个提交到服务器的处理通常可以分为两个阶段,第一个阶段查询服务器状态(查询或者更新数据库),第二个阶段选择一个合适的结果页面其返回给用户(这里要讲的Result的内容)。 
Struts2提供了对不同种类返回结果的支持,常见的有JSP,FreeMarker,Velocity等。 
Struts2支持的不同类型的返回结果为: 
名字 
说明 
Chain Result 
用来处理Action链 
Dispatcher Result 
用来转向页面,通常处理JSP 
FreeMarker Result 
处理FreeMarker模板 
HttpHeader Result 
用来控制特殊的Http行为 
Redirect Result 
重定向到一个URL 
Redirect Action Result 
重定向到一个Action 
Stream Result 
向浏览器发送InputSream对象,通常用来处理文件下载 
Velocity Result 
处理Velocity模板 
XLS Result 
处理XML/XLST模板 
PlainText Result 
显示原始文件内容,例如文件源代码 
S2PLUGINS:Tiles Result 
结合Tile使用 
另外第三方的Result类型还包括JasperReports Plugin,专门用来处理JasperReport类型的报表输出。 
在struts-default.xml文件中已经有了对于所有类型Result的定义: 
<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"/> 



IP属地:浙江1楼2009-10-06 22:06回复

        <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" /> 
        <!-- Deprecated name form scheduled for removal in Struts 2.1.0. 
             The camelCase versions are preferred. See ww-1707 --> 
        <result-type name="redirect-action" 
                 class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/> 
        <result-type name="plaintext" 
                 class="org.apache.struts2.dispatcher.PlainTextResult" /> 
    </result-types> 
    从上述代码中可以看出在不指定Result类型的时候使用dispatcher类型。 
    定义一个Result值, 
    <result name="success" type="dispatcher"> 
        <param name="location">/ThankYou.jsp</param> 
    </result> 
    由于type默认值是dispatcher,所以这里不需要定义,另外name的默认值为success所以这里也不需要定义。 
    上述代码可以简写为: 
    <result> 
        <param name="location">/ThankYou.jsp</param> 
    </result> 
    另外location参数也可以直接卸载result标签内部,所以上述代码的最简单的写法为: 
    <result>/ThankYou.jsp</result> 
    我们也可以定义多个不同的Result 
    <action name="Hello"> 
    <result>/hello/Result.jsp</result> 
    <result name="error">/hello/Error.jsp</result> 
    <result name="input">/hello/Input.jsp</result> 
    </action> 
    上述代码的含义为,名字为Hello的Action有三个返回结果,并且都是 dispatcher类型(默认类型),这三个返回值的名字分别为success(默认值),error,input(当输入不通过时,action 方法返回input),对应的页面的路径分别为 /hello/Result.jsp,/hello/Error.jsp,/hello/Input.jsp。 
    有些时候我们需要一个定义在全局的Result,这个时候我们可以在package内部定义全局的Result,例如: 
    <global-results> 
    <result name="error">/Error.jsp</result> 
    <result name="invalid.token">/Error.jsp</result> 
    <result name="login" type="redirect-action">Logon!input</result> 
    </global-results> 
    动态返回结果 
    有些时候,只有当Action执行完璧的时候我们才知道要返回哪个结果,这个时候我们可以在Action内部定义一个属性,这个属性用来存储Action执行完璧之后的Result值,例如: 
    private String nextAction; 
    public String getNextAction() { 
        return nextAction; 

    在strutx.xml配置文件中,我们可以使用${nextAction}来引用到Action中的属性,通过${nextAction}表示的内容来动态的返回结果,例如: 
    <action name="fragment" class="FragmentAction"> 
    <result name="next" type="redirect-action">${nextAction}</result> 
    </action> 
    上述Action的execute方法返回next的时候,还需要根据nextAction的属性来判断具体定位到哪个Action。 
    在strutx.xml配置文件中,我们可以使用method=""来设置调用类的哪个方法,这样就可以在一个JAVA类中使用不同的方法来实现不同的功能,就无需每个功能写一类了,例如: 
    <action name="fragment" class="FragmentAction" method="add"> 
          <result>/success.jsp</result> 
    </action>


    IP属地:浙江2楼2009-10-06 22:06
    回复