您的位置:首页 > 编程语言 > Java开发

Struts2模型驱动的一个问题

2015-11-28 15:58 399 查看
模型驱动在Struts2中确实是一个好东西,可以让我们方便的获取表单提交过来的数据。而不再是原来使用的属性驱动。

同时,我们也要了解其原理。实现ActionSupport的子类通过实现ModelDriven接口,并实现getModel方法。

我们的Action一定会有一个private T t;这里的T是指JavaBean实体类。当然我们也会new一个new T

public class TestAction extends ActionSupport implements ModelDriven<User>{
//待会Struts会将这个对象压入值栈ValueStack
private User user=new User();
@Override
public User getModel() {
return this.user;
}
}


因为返回Action并转发到指定页面,此时Struts会将User对象压入值栈的栈顶。此时栈顶的User对象指向我们new的这个实例。

public String show(){
//new一个User对象模拟从数据库中查找出来的对象
User user=new User();
user.setUid(123);
user.setUsername("bleboz");
//将这个模型驱动对象的引用指向创建出来的对象。
this.user=user;
return "show";
}


这里便出问题了,ValueStack中的User对象指向我们一开始模型驱动new的User对象,而我们在show方法中又重新创建了一个User对象,它指向一个新的地址。而我们的

this.user=user;

将this.user指向了我们新建的User对象,此时,ValueStack中的User指向还是原来的,我们ModelDriven一开始new的User对象,所以并没有给ValueStack中的User对象赋值。

具体如何解决

最傻瓜式的办法

public String show(){
User user=new User();
user.setUid(123);
user.setUsername("bleboz");
//一个一个的赋值。
this.user.setUid(user.getUid());
this.user.setUsername(user.getUsername());
return "show";
}


这样的话,问题就完美的解决了,但是似乎有一丝不灵活。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: