Struts2模型驱动将实体类对象自动压入值栈栈顶的问题

struts2中action自动将模型(实体类对象)放入值栈栈顶,栈顶的实体类实例的各个属性(除了从页面通过模型驱动进来的属性)总是null,通过不断的挠头和查阅才发现模型驱动的ModelDriven接口的 getModel()返回的对象指向的是实例是最初new出的对象的地址,如果在action中调用service返回一个新的对象,再给原来的对象赋值,就改变了地址,这个新的地址中的对象就不会被返回,因此,值栈中的对象还是从前地址中的对象,各项都是null。

	private user = new user()  ;// 这是最初的模型
	@Override
	public Draft getModel() {
		return user;  //返回的是这个对象的地址
	}
	如果此时在某个action中:
	@Action(value="",results={@Result(name="",location="")})
	public String test(){
	user = service.finUser(xxx) ; //findUser方法返回一个User对象,并且改变了原来user对象的引用,指向了返回的这个User对象。地址发生了改变,getModel方法依旧返回了原来地址中的对象
	}

而这个时候,如果要想栈顶对象的各个属性都有值,那么可以通过在action中创建一个临时的userTemp对象,用这个对象去接受service.find()方法返回的对象,然后再通过user.setXxx(userTemp.getxxx())方法,在不改变user地址的前提下,设置user对象的值。

@Action(value="",results={@Result(name="",location="")})
	public String test(){
	userTemp = service.findUser(xxx) ;
	user.setUsername (userTemp.getUsername()) ;
	user.setPassword(userTemp.getPassword) ;
	....
	return SUCCESS ; 
	}

这样做就可以让值栈栈顶的user对象的各属性都有值,但是这样有点僵硬,还有其他办法吗?

猜你喜欢

转载自blog.csdn.net/weixin_40616523/article/details/85069206