• 【struts2】名为chain的ResultType


      1)基本使用

      名称为“chain”的ResultType,在struts-default.xml里的配置如下:

    <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>

      chain是一种特殊的视图结果,用来将Action执行完之后链接到另一个Action中继续执行,新的Action使用上一个Action的上下文(ActionContext),数据也会被传递。

      这在实际开发中,也是经常用到的一种ResultType。比如我们在Servlet开发中,一个请求,被一个Servlet处理过后,不是直接产生相应,而是把这个请求传递到下一个Servlet继续处理,直到需要的多个Servlet处理完成后,才生成响应返回。同样的,在Struts2开发中,也会产生这样的需要,一个请求被一个Action处理过后,不是立即产生响应,而是传递到下一个Action中继续处理。那么这个时候,就需要使用chain这个ResultType了。

      来示例一下,先看看第一个Action,就用HelloWorldAction吧,稍微简化一下,示例如下:

    public class HelloWorldAction extends ActionSupport {  
        private String account;  
        private String password;  
        private String submitFlag;  
          
        public String execute() throws Exception {  
            this.businessExecute();  
            return "toSecond";  
        }  
        public void businessExecute(){  
            System.out.println("用户输入的参数为==="+"account="+account+",password="+password+",submitFlag="+submitFlag);  
        }  
    //属性对应的getter/setter方法,省略了  
    }  

      第二个Action,示例代码如下:

    public class SecondAction extends ActionSupport {     
        public String execute() throws Exception {  
            System.out.println("现在SecondAction进行处理");  
            return "toWelcome";  
        }  
    }  

      然后到struts.xml中,配置这两个Action,要注意第一个Action的配置,在配置“toSecond”这个result的时候,用的就是chain这个ResultType,示例如下:

    <package name="helloworld"  extends="struts-default">  
            <action name="helloworldAction" class="cn.javass.action.action.HelloWorldAction">  
                <result name="toSecond" type="chain">  
                    <param name="actionName">secondAction</param>  
                </result> 
                <!--下面这样配置也可以
                <result name="toSecond" type="chain">secondAction</result>
                 --> 
            </action>  
            <action name="secondAction" class="cn.javass.action.action.SecondAction">  
                <result name="toWelcome">/s2impl/welcome.jsp</result>  
            </action>  
        </package>  

      2)备注

    • chain不能在result配置的时候传递参数,也就是说,不能类似于如下的配置:
    <result name="toSecond" type="chain">  
       <param name="actionName">secondAction?account=5</param>  
    </result>  

      这种配置方式是不行的,因为这里要求配置的是要链接的Action的name,不能传递参数,那么,要传递参数怎么办呢?那就需要在Action里面使用ActionContext或者ServletActionContext了。

    • 使用chian的方式,后面的Action会和前面的Action共用同一个ActionContext
    • 名称为“chain”的ResultType在配置的时候,除了前面示例中的actionName外,还有一个参数,名称为“namespace”,表示被链接的Action所在包的命名空间,如果不设置,默认的即是当前的命名空间。配置示例如下:
    <result name="toSecond" type="chain">  
       <param name="actionName">secondAction</param>  
       <param name="namespace">其他Package的namespace</param>  
    </result>  

      参考资料:http://www.iteye.com/topic/1124526

  • 相关阅读:
    Java 实例
    为什么很多程序员工作时都戴耳机?
    HTTP状态码大全
    Eclipse怎么切换工作空间
    maven POM.xml内的标签大全详解
    利用html5的FormData对象实现多图上传
    后台定时器注解方式
    js多定时器
    解决ios上微信无法捕获返回键按钮事件的问题
    上传文件,获取表单数据和文件流
  • 原文地址:https://www.cnblogs.com/ningvsban/p/3735195.html
Copyright © 2020-2023  润新知