action用到的对象是
User(共有4个属性id、name、age、addr)用于编辑User的jsp页面 user-edit.jsp  (提交到UserAction的save函数)
<form action="user!save.action" method="post">
  <input type="hidden" name="user.id"  value="${user.id}"/>
  <input type="text" name="user.name"  id="user.name" value="${user.name}"/>
  <input type="text" name="user.age"  id="user.age" value="${user.age}"/>
  <input  type="submit" value="提交"/>
</form>然后我在UserAction中的save函数是这样写的
public String save() throws Exception {
userManager.saveUser(user);
addActionMessage("保存用户成功");
return RELOAD;
}上面User是4个属性,但在user-edit.jsp我只放了3个属性(addr属性没放)
比如我原来User对象是id=1,name="小王",age=20,addr="浙江省"
然后转到编辑界面,这个时候界面上显示的是1,小王,20,然后我在点提交,
如果用上面的save函数的话,获取到的对象是这样的
id=1,name="小王",age=20,addr=NULL,addr对象是Null,这样就把原来Id是1的addr字段设置成空了当然了,有2中方式来解决,
第一种就是在页面上加入addr隐藏字段,然后在调用上面的Save函数
第二种
我可以通过下面这个save函数来解决
public String save() throws Exception {
int id=user.getId();
User user1=userManager.getUser(id);
user1.setName(user.getName());
user1.setAge(user.getAge());
userManager.saveUser(user1);
addActionMessage("保存用户成功");
return RELOAD;
}
但是这样就有一个问题了,假如user对象有100个字段,但界面上显示了95个,
如果我用第一种方法,那不是每次增加一个字段,都要同时在界面上也加一个hidden字段,就算这个字段是不是需要在界面上用到
第二种方法 我不是一共要user1.setXXX(user.getXXX())这样搞95次了,那不是要麻烦死了
请高手帮忙,有什么好的方法来帮我解决这个问题,或者大家一般是用什么方法的

解决方案 »

  1.   

    既然 你要大的数据量,那么每个数据的保存都是要完成的,只有一次存一个 或者一次存一批的区别,(这一批的量 也要控制好),你说 user有100字段 什么意思,不就4个属性么?
      

  2.   

    save里处理方法:1.画面过来的User对象为userA2.通过画面过来的userA对象对应表中的主键,到数据库里查询对应记录,结果对象为userB3.把userA的中要更新的字段设置到userB中,save userB
      

  3.   

    我知道这个方法,上面我说的2中方法也说到了,但是如果User的属性很多,比如有100个,那么从userA将属性更新到userB的过程中,不是要用setXXX  100次了,那不是很麻烦
      

  4.   

    思路是没有错的,要么通过工具或自己写一个工具实现UserBean值对copy。
      

  5.   

    我也在纠结这个问题,不知怎么弄,而且如果addr是一个Address类型的对象,那怎么通过隐藏字段弄呢
      

  6.   

    3楼的大哥说的对,你可以传对象啊,不一定要一个一个属性那样传。例如 <input type="hidden" name="user" value="${user}"/>