企业如何通过vue小程序开发满足高效运营与合规性需求
606
2022-11-26
Struts Chain ClassCastException Aop
我们知道struts的restult type 有很多,但主要就是四种 dispatch,rediret,chain,drdirectaction
要让数据从一个action传到另一个action,就只能使用后两种,即chain与redirectaction(后来发现rediret也可以,网上说使用redirect的时候得加上扩展名例如,login.acion等等,可我发现,不加也OK)。
可能是因为,我的过滤器是这么写的
这俩的区别如下:
先说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的值,下面这种写法是不行的
上面的情况下,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
以上为基础知识
****************************
今天在做项目的时候,发现一个搞不明白的问题。
ClassFrom与ClassTo的execute方法就等于是在一个事务里的。
struts的配置文件如下:
结果报了下面的错误
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不要急,仔细看看异常的输出栈
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~