我们知道struts的restult type 有很多,但主要就是四种

dispatch,rediret,chain,drdirectaction

要让数据从一个action传到另一个action,就只能使用后两种,即chain与redirectaction(后来发现rediret也可以,网上说使用redirect的时候得加上扩展名例如,login.acion等等,可我发现,不加也OK)。

可能是因为,我的过滤器是这么写的

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

这俩的区别如下:



先说chain,如果resulttype为chain,如果第一个action(我们暂且称为actionFraom)里面有有个成员变量叫name,而且第二个action(称为actionTo)里面也有个变量叫name,那么第二个action里面的值会复制第一个action。

public class ClassFrom {
    private String  name;
    private String transFormLocation;
    public String execute(){
        setTransFormLocation("classTo");
        System.out.println("i am classfrom");
        System.out.println(name+" name");
        return "success";
    }
    //省略getset
}

public class ClassTo {
    private String name;
    private String other;

    public String execute(){
        System.out.println("I am  classto");
        System.out.println(name+" name to");
        System.out.println(other+" other to");
        return "success";
    }
    //省略getset方法
}

如果,actionTo里面有个变量叫other,我想让它也复制actionFrom里name的值,下面这种写法是不行的

    <package name="sdf" namespace="/modules" extends="struts-default">

         <action name="classFrom" class="com.bufoon.action.ActionFrom" >
             <result name="success" type="chain">
                <param  name="actionName">classTox</param>
                <param   name="other">${name}</param>
             </result>
        </action>

        <action name="classTox" class="com.bufoon.action.ActionTo" >
            <result>../result.jsp</result>
        </action>

    </package> 

上面的情况下,actionto里面的other的值为null

但是actionfrom与actionto里同名的变量name的值是统一的(如果非要在actionto里用other获得值,让它自己找actionto里的name要)

如果使用redirectAction,那么情况刚刚相反,

actionTo里面的other获得了actionFrom里name的值

但是actionTo里面的name却为null



结论

1 基本都用chain吧 能满足你传值的需要(前提是两个action的变量是一致的)

2 如果用redirectaction 就得手动在xml里写param

更多资料见

http://blog.csdn.net/yujielu2012/article/details/8188383

以上为基础知识

****************************





今天在做项目的时候,发现一个搞不明白的问题。

首先,项目采用的是ssh,事务我采用的是xml的声明式事务管理。

ClassFrom与ClassTo的execute方法就等于是在一个事务里的。

struts的配置文件如下:

<package name="sdf" namespace="/modules/file_gxb/createFile" extends="struts-default">

         <action name="classFrom" class="cdm.module.file.gxb.action.ClassFrom" >
            <result type="chain">classTox</result>
        </action>

        <action name="classTox" class="cdm.module.file.gxb.action.ClassTo" >
            <result>../../../result.jsp</result>
        </action>
</package>

结果报了下面的错误

java.lang.ClassCastException: cdm.module.file.gxb.action.ClassFrom cannot be cast to cdm.module.file.gxb.action.ClassTo



    cdm.module.file.gxb.action.ClassTo$$FastClassByCGLIB$$43d16e6a.invoke()

    net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)

    org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:700)

    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)

    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)

    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)

    org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)

    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)

    org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635)

    cdm.module.file.gxb.action.ClassTo$$EnhancerByCGLIB$$90aba811.execute()

    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

刚开始,我还以为是自己对struts的传值理解的不清楚,就找了些资料,写了本篇博客的前半部分。

可是前面,action不管值能不能传递,最起码不会说ClassCastException呀。



最后仔细分析了错误,发现有aop的问题。

最后把chain改成了redirectAction 就一切OK了。

但是,此时两个action就不在一个事务里了

目前我没有更好的办法

问题就在aop里。

但是这里面更深层次的东西,估计得看源码才能解决了。

结论:

出了bug不要急,仔细看看异常的输出栈

Struts Chain ClassCastException Aop的更多相关文章

  1. org.apache.struts.chain.commands.InvalidPathException: No action config found for the specified url.

    No action config found for the specified url url路径下找不到action,原因是stuts-config.xml文件配置错误. demo的项目文件如下: ...

  2. 尚学堂马士兵struts2 课堂笔记(四)

    27 结果类型 主要就四种种 dispatch和rediret chain和drdirectaction <package name="resultTypes" namesp ...

  3. struts框架学习过程中的问题

    1,错误: java.lang.NullPointerException: Module 'null' not found.错误原因,struts运行需要的.jar文件拷贝不足,应该把它们加入到cla ...

  4. 【struts 报错】 No action config found for the specified url

    1 type Exception report message org.apache.struts.chain.commands.InvalidPathException: No action con ...

  5. 使用Hibernate+MySql+native SQL的BUG,以及解决办法

      本来是mssql+hibernate+native SQL 应用的很和谐 但是到了把mssql换成mysql,就出了错(同样的数据结构和数据). 查询方法是: String sql = " ...

  6. S2SH+mysql-软件开发实际部署问题-8个小时后提示MYSQL数据库无法连接

    type Exception report message description The server encountered an internal error () that prevented ...

  7. Struts1的核心对象

    1.ActionServlet.ActionMapping.ActionForm.ActionForward 2.config = "/WEB-INF/struts-config.xml&q ...

  8. Spring day03笔记

    spring day02回顾 AOP :切面编程 切面:切入点 和 通知 结合 spring aop 编程 <aop:config> 方法1: <aop:pointcut expre ...

  9. struts2的result的type属性

    一共有两个属性name和type name这里就不介绍了 type    返回结果的类型,值可以从default-struts.properties中看到看到 常用的值:dispatcher (默认) ...

随机推荐

  1. CI表单验证

    =================Form辅助函数==================== 1.在视图文件中导入:$this->load->helper("form") ...

  2. 剑指架构师系列-Logstash分布式系统的日志监控

    Logstash主要做由三部署组成: Collect:数据输入 Enrich:数据加工,如过滤,改写等 Transport:数据输出 下面来安装一下: wget https://download.el ...

  3. spring cloud 入门系列四:使用Hystrix 实现断路器进行服务容错保护

    在微服务中,我们将系统拆分为很多个服务单元,各单元之间通过服务注册和订阅消费的方式进行相互依赖.但是如果有一些服务出现问题了会怎么样? 比如说有三个服务(ABC),A调用B,B调用C.由于网络延迟或C ...

  4. sql server 的osql 使用例子

    一次性执行一个语句并输出到文件: osql -Usa -dSCGWYDJ2012 -P -S192.168.56.1 -Q "exit( SELECT top 1 * FROM A08)&q ...

  5. 初识在Spring Boot中使用JPA

    前面关于Spring Boot的文章已经介绍了很多了,但是一直都没有涉及到数据库的操作问题,数据库操作当然也是我们在开发中无法回避的问题,那么今天我们就来看看Spring Boot给我们提供了哪些疯狂 ...

  6. 制定一个apk路径 然后跳出安装界面

    制定一个apk的路径 然后跳出界面让用户选择是否安装 我们系统有一个写好的Activity来协助我们完成这一功能 我们来看看它的清单文件 <?xml version="1.0" ...

  7. 在ubuntu上搭建交叉编译环境---arm-none-eabi-gcc

    最近要开始搞新项目,基于arm的高通方案的项目. 那么,如何在ubuntu上搭建这个编译环境呢? 1.找到相关的安装包:http://download.csdn.net/download/storea ...

  8. GirlFriendNotFoundException异常是怎样处理的?

    GirlFriendNotFoundException异常是怎样处理的? 如果说要去创造这个异常,那么我们的JAVA程序里,肯定是继承Exception去处理,所有我们可以先实现一个自己的Except ...

  9. Apache shiro集群实现 (二) shiro 的INI配置

    Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

  10. ORACLE异常(整理网上资料)

    一.oracle预定义异常 命名的系统异常 产生原因 Oracle Error SQLCODE Value ACCESS_INTO_NULL 未定义对象 ORA-06530  -6530 CASE_N ...