Struts2模型驅動將實體類物件自動壓入值棧棧頂的問題
阿新 • • 發佈:2018-12-23
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物件的各屬性都有值,但是這樣有點僵硬,還有其他辦法嗎?