1. 程式人生 > >Struts2模型驅動將實體類物件自動壓入值棧棧頂的問題

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物件的各屬性都有值,但是這樣有點僵硬,還有其他辦法嗎?