日期:2014-05-17  浏览次数:20741 次

struts2 关于从jsp获取对象并赋值的问题
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次了,那不是要麻烦死了
请高手帮忙,有什么好的方法来帮我解决这个问题,或者大家一般是用什么方法的


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