Struts Chain ClassCastException Aop
我们知道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的更多相关文章
- 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的项目文件如下: ...
- 尚学堂马士兵struts2 课堂笔记(四)
27 结果类型 主要就四种种 dispatch和rediret chain和drdirectaction <package name="resultTypes" namesp ...
- struts框架学习过程中的问题
1,错误: java.lang.NullPointerException: Module 'null' not found.错误原因,struts运行需要的.jar文件拷贝不足,应该把它们加入到cla ...
- 【struts 报错】 No action config found for the specified url
1 type Exception report message org.apache.struts.chain.commands.InvalidPathException: No action con ...
- 使用Hibernate+MySql+native SQL的BUG,以及解决办法
本来是mssql+hibernate+native SQL 应用的很和谐 但是到了把mssql换成mysql,就出了错(同样的数据结构和数据). 查询方法是: String sql = " ...
- S2SH+mysql-软件开发实际部署问题-8个小时后提示MYSQL数据库无法连接
type Exception report message description The server encountered an internal error () that prevented ...
- Struts1的核心对象
1.ActionServlet.ActionMapping.ActionForm.ActionForward 2.config = "/WEB-INF/struts-config.xml&q ...
- Spring day03笔记
spring day02回顾 AOP :切面编程 切面:切入点 和 通知 结合 spring aop 编程 <aop:config> 方法1: <aop:pointcut expre ...
- struts2的result的type属性
一共有两个属性name和type name这里就不介绍了 type 返回结果的类型,值可以从default-struts.properties中看到看到 常用的值:dispatcher (默认) ...
随机推荐
- Dockerfile的指令
指令的一般格式为 INSTRUCTION arguments,指令包括 FROM.MAINTAINER.RUN 等. FROM 格式为 FROM <image>或FROM <imag ...
- Bootstrap3 表格-鼠标悬停
通过添加 .table-hover 类可以让 <tbody> 中的每一行对鼠标悬停状态作出响应. <table class="table table-hover" ...
- Android的Spinner控件用法解析
微调框 微调框提供一种方法,让用户可以从值集中快速选择一个值.默认状态下,微调框显示其当前所选的值. 触摸微调框可显示下拉菜单,其中列有所有其他可用值,用户可从中选择一个新值. 您可以使用 Spinn ...
- 六星经典CSAPP-笔记(3)程序的机器级表示
1.前言 IA32机器码以及汇编代码都与原始的C代码有很大不同,因为一些状态对于C程序员来说是隐藏的.例如包含下一条要执行代码的内存位置的程序指针(program counter or PC)以及8个 ...
- Android 异步查询框架AsyncQueryHandler的使用
AsyncQueryHandler简介: 异步的查询操作帮助类,可以处理增删改(ContentProvider提供的数据) 使用场景: 在一般的应用中可以使用ContentProvider去操作数据库 ...
- 类型转换异常处理java.lang.RuntimeException
前几天在做一个安卓项目的时候一直报java.lang.RuntimeException错,一直调试不出来,今天突然又灵感是不是文件配置出错了,果然在清单文件中少了一句 android:name=&qu ...
- hive日志位置(日志定位报错:Failed with exception Unable to move sourcehdfs://namenode/tmp/hive-pmp_bi/h)
Hive中的日志分为两种 1. 系统日志,记录了hive的运行情况,错误状况. 2. Job 日志,记录了Hive 中job的执行的历史过程. 日志查看方法 1,在本地运行机器上 hive日志存储位置 ...
- SSH网上商城---用户激活
在前面的博客中,小编主要结合SSH网上商城这个项目,简单的介绍了如何实现邮件发送的这个功能,邮件发送了,接下来就是激活了,为什么呢?现在大多网站都要通过对账号进行激活,然后才能注册成功,这是防止恶性注 ...
- Android7.0 多窗口你值得拥有
Android7.0 多窗口你值得拥有 什么是多窗口分屏? 多窗口分屏其实在国内并不陌生,已经有一些手机和平板搭载了"分屏多任务"和"APP窗口化"功能,但这些 ...
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...