struts2通过表单提交POJO对象出错,生成的POJO类只有一个属性

  struts2通过表单提交POJO对象出错,生成的POJO类只有一个属性。我要通过JSP向Action提交一个封装用户信息的POJO对象,对象是顺利生成了,但是只有一个属性有值,其他都是null。在Action上面加了断点发现request里边的参数和值都正常,POJO类属性的get和set方法都有了,action类上也给POJO类实例加了set方法。百思不得其解。

  之前也遇过这个问题,因为开发进度非常紧,临时给Action多设置了几个属性,加上get和set,然后自己手动在action内拼装成pojo了事。不想今天再次遇到。晚上终于在一篇文章里找到原因:

  struts2技巧与解惑——为什么我的表单参数只有一个生效(控制器对象属性没有或者只有一个被设置)

  该博主在POJO类的set方法上打了断点,发现各属性的set方法都被调用了,但是不在一个实例上。经过分析,其逻辑如下:

  1. Action的代理会遍历request里面获取到的每一个键值对。

  2. 对于每一个键值对,代理会先检查Action是否有该属性。如有,则尝试调用set方法赋值。

  3. 对于非基础类型的属性,代理会先尝试获取该属性,如无法获取(没有get方法)或者获取结果为null,则调用其构造方法。

  4. 经过步骤3,代理已经拥有一个该对象的实例了,好,调用该实例相应的set方法,把当前这个键的值set进去。再调用Action类的set方法把这个实例丢进去。

  5. 过了一会,又有一个键值对对应上述的这个对象。代理已经不记得手头上曾经有一个实例了,只好再次尝试获取该属性,不好意思没有get方法,重新new一个实例,再重复步骤4。原来那个实例则等着被回收。

  6. 如此反复,最终只有最后一次被赋值的那个实例存在,其只有一个属性有值,其他都是null。

  解决办法即是,加上get方法


转载于:https://my.oschina.net/mzdbxqh/blog/644164

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值