js回掉函数取不到action字段的问题

一、问题描述

js与action之间传值出现问题。在struts2的action中成功拿到service层的数据,但是将值传入jsp时出现问题。

action中字段:

@Autowired
private User user;
有getter,setter方法。

js代码如下:

 <script type="text/javascript">
      $().ready(function(){
          $(":button").click(function () {
              $.post("User_select",{
                  result:"hahahaha"
              },function(data){
//                  result = eval("(" + data + ")").result;
                  alert(data.user.name);
              });
          });
      });
    </script>


报错内容:页面报错

Cannot read property 'name' of undefined


二、解决步骤

1.一头雾水的错误。

首先检查了在action中能成功打印user.name

然后检查了struts.xml文件,其中extends和result type的配置也没有错误。

<package name="user" namespace="/" extends="json-default">
        <action name="User_*" class="userAction" method="{1}">
            <result type="json"></result>
            <!--<result name="paramInject">test1.jsp</result>-->
        </action>
    </package>
js代码块只是一个简单的函数,也没有语法错误,并能成功访问action。

那逻辑上是没有问题的,只是不懂味什么前端取不到action的值。


2.考虑会不会是因为spring注解生成的实例和struts生成的成员属性的实例不是同一个,所以取不到成员属性的值。

将@Autowired注解注释掉,就成功获得了action中的值。


3.回想起前两天进行struts2和spring的整合后,后台传值都没有问题,只有jsp无法使用jstl表达式获取action中的成员属性。会不会也是因为@Autowired的问题。

去掉@Autowired注解后,使用${user.name}就能通过getter,setter方法获得action中的值了。


4.只是@Autowired的问题吗?

将spring的ApplicationContext.xml文件中手动配置action的bean和其中的property子节点

 <bean id="user" class="cn.chan.entity.User"></bean>

    <bean id="userAction" class="cn.chan.action.UserAction" scope="prototype">
     <property name="model" ref="user"></property>
    </bean>
这样同样会使jsp取不到action中的值。


5.结论:在使用spring依赖注入的时候创建的实例,会和sturts2底层创建成员属性实例冲突。两者创建的不是同一个实例,因此jsp无法拿到正确的action中成员属性的实例对象。切记在action中和前端进行参数传递的时候不要将相应的字段使用spring的依赖注入。如何解决这一问题的方法目前还没找到,了解后再记录。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值