原因是你的Action里的swfUserVO对象没有实例化,onglstack无法为找不到这个对象更无法为它赋值了,当然如果你还有别的拦截器接受参数,这个警告可以忽略了,对于级联对象赋值我想必须忽略它了,struts.dev=false就看不到这个警告了。

解决方案 »

  1.   

    感谢一楼的观注。。告诉您一个不好的消息。。这个方法不好用。。我试验过了。。
    我想说一下我的看法。。不知道是对是错。。希望一楼能继续帮助小弟解决问题
    我感觉不应该是实例化的问题因为这个写法。。在我不使用Aop对Action进行拦截的时候。。程序是可以运行的。。也就是说,Action里的swfUserVO对象没有实例化,我只写了swfUserVO的get,set 方法,onglstack成功为swfUserVO的pass变量进行赋值了。
    如果 使用Aop对Action进行拦截的时候。。程序都会出现这个异常
    小弟个人认为。应该是Aop拦截的时候。。出现的问题。。
      

  2.   

    这个问题已经问了很长一段时间,不知道楼主解决了没,我这边提供解决方法。但深层次的原因我也说不出来。
    遇到这个问题,我猜应该是楼主使用了Srping的org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator代理去创建action造成的。好像由于是jdk创建的什么代理啊,我也不是很清楚。
    解决办法是加上“targetSource.target”。更具体些就是:比如jsp上的表单需要往action的formBean中的userid传值,不使用代理可以这样写“formBean.userid”,用了代理要写出“targetSource.target.formBean.userid”。还有一个值得注意的是,Struts2 的xml配置里如果要用到action中的属性,比如action跳转action,需要给action传值,代理前的写法直接是<result type="XXXX">b.action?arg1=${属性}</result>。用了代理后要写成<result type="XXXX">b.action?arg1=${targetSource.target.属性}</result>------------------------------------分割-----------------------------------------------
    虽然这样能解决问题,但是我想,写这么长一串东西,是个人都觉得麻烦,我也不知道有没有别的办法来解决这个问题。正在研究......知道的朋友可以指点一下。
      

  3.   

    额今天运气挺好,前几天一直困扰的问题解决了。还真的是BeanNameAutoProxyCreator代理问题。
    网上高手说“BeanNameAutoProxyCreator默认使用Jdk动态代理”我猜这个jdk动态代理就一定要指定“targetSource.target”吧。而使用“cglib代理类”则不一定需要“targetSource.target”。
    办法是<bean id="exceptionLog" class="com.oyd.common.interceptor.ExceptionAdvice">
        </bean>
        <!-- beanName自动代理 -->
        <bean id="advice"
            class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
            <property name="beanNames">
                <list>
                  <value>*Action</value>
                    <value>*Service</value>
                    <value>*Dao</value>
                </list>
            </property>
            <property name="proxyTargetClass" value="true" />
            <property name="interceptorNames">
            <list>
                <value>exceptionLog</value>
            </list>
            </property>
        </bean>
    <property name="proxyTargetClass" value="true" />这句是关键。使用cglib代理之后加不加“targetSource.target”都可以接受到数据而不会报错。