zoukankan      html  css  js  c++  java
  • 【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

  • 相关阅读:
    mysql 历史版本下载
    mysql 5.7 版本 You must reset your password using ALTER USER statement before executing this statement报错处理
    5.7 zip 版本的安装 以及遇到的坑
    mysql 5.6zip版本的卸载与5.7 zip 版本的安装
    mysql数据库的备份与还原
    本地Navicat连接docker里的mysql
    docker修改数据库密码
    docker 在push镜像到本地registry出现的500 Internal Server Error
    linux 没有界面内容显示不全解决办法
    json与map互相转换
  • 原文地址:https://www.cnblogs.com/ningvsban/p/3735195.html
Copyright © 2011-2022 走看看