modeldriven:模型驅動,對所有action的模型物件進行批處理.
我們在開發中, 在action中一般是用實體物件,然後給實體物件get,set方法。
regaction
然後在jsp頁面中給action中的user屬性繫結值是通過如下方式
這樣都要加上user.因為在值棧中action進入值棧的時候,值棧中儲存的值就是以user.name這種形式存在的,所以ognl搜尋值棧的時候,也要按這個名字來搜尋。
這樣就 比較麻煩,於是就引入了模型驅動。
引入模型驅動後在jsp頁面繫結屬性值的時候就可以不用加上user. 如:
原理是什麼:ognl在搜尋name值的時候,會把模型驅動user壓入棧頂。ognl在值棧掃瞄的時候,會從上往下找,這樣就會搜到user中的name,等等
是模型***把模型壓入棧頂的。
user類
public class userpublic void setname(string name)
public integer getage()
public void setage(integer age)
public integer getid()
public void setid(integer id)
public string tostring()
}
/**public user getmodel()* mdaction:某型驅動
*/public class mdaction extends actionsupport implements modeldriven,preparable
@skipvalidation
public string tore**iew()
public user getmodel()
public string getname()
public void setname(string name)
public string edit()
user u = new user();
u.setid(uid);
u.setname("jerry");
u.setage(30);
user = u ;注意,這裡的user並不是棧頂的user,引用已經指向了新物件u
如果要把u物件放到棧頂,可以手動的push
servletactioncontext.getcontext().getvaluestack().push(u) ;//把u物件放到棧頂,那麼執行修改時回顯的就是該物件的資料。
}上面的方法是手動把u物件壓入棧頂,還有一種方法可以解決這個問題。
模型驅動***的高階應用:
struts在呼叫模型驅動***的之前會呼叫prepare***,prepare***中會呼叫乙個prepare方法,該方法在模型驅動***之前呼叫,也就是在模型驅動
***中的getmodel方法之前執行,getmodel方法返回的就是棧頂的物件,那麼可以在prepare中把getmodel方法中要返回到棧頂的物件給換掉,也就是重新引用。
這樣就不用手動的push到棧頂了。
/**但是由於使用的是預設***棧,prepare***在params***之前執行,這樣在編輯的時候,就無法獲取到id值,因為此時還沒有經過引數params爛機器的處理。* mdaction:某型驅動
*/public class mdaction extends actionsupport implements modeldriven,preparable
@skipvalidation
public string tore**iew()
/*** 查詢所有使用者
*/public string findallusers()
return "userlistview";
}public string edit()
//public user getmodel()
public string getname()
public void setname(string name)
public listgetuserlist()
public void setuserlist(listuserlist)
public integer getuid()
public void setuid(integer uid)
/*** 該方法在getmodel之前執行,在modeldriven***之前先執行
*/public void prepareedit() throws exception
public void prepare() throws exception
}
所以這種方法不能使用預設的***棧,struts-default.xml提供了乙個***棧paramsprepareparamsstack,所以要引入該***棧。
/md/reg.jsp模型驅動的應用:/md/reg.jsp
/md/edit.jsp
/md/userlist.jsp
不能引入預設***棧,要在prepare***之前執行params***
假設在開發中有很多實體物件,比如使用者類user,訂單類order,部門類department等等
對應的有很多action,如useraction,orderaction,departmentaction等等。
useraction{
user user;
orderaction{
order order;
如果在開發中需要開發乙個處理模型的***
processmodelinterceptor{
if(action instanceof(useraction){
object o=getuser();//得到該實體類的物件
else if(action instanceof(orderaction){
order o=getorder();//得到該實體類的物件
這樣如果有很多的類幾十甚至上百個實體類,都要這麼去判斷,將是十分的麻煩。引入了模型驅動後就解決了這個問題。
引入模型驅動後的做法:模型驅動的好處是對所以的action模型物件進行批處理
processmodelinterceptor{
if(action instanceof(modeldriven){//判斷action是否實現了模型驅動介面
object o=((modeldriven)action).getmodel();//得到action的模型物件
然後用反射獲取action中的資訊
modeldriven 和getModel的作用
所謂modeldriven,意思是直接把實體類當成頁面資料的收集物件。比如,有實體類user如下 packagecn.com.leadfar.struts2.actions public classuser public voidsetusername string username publics...
資料驅動 模型驅動 模型驅動的雲安全
存檔日期 2019年5月15日 首次發布 2011年2月8日 手動將安全策略轉換為技術實施非常困難,昂貴且容易出錯,尤其是在應用程式層實施時。為了在時間和金錢上的投資方面實現更多的成本節省,雲安全工具需要變得更加自動化。還需要這些工具的自動化,以使雲安全管理成為一項更輕鬆的任務,使雲管理員可以專注於...
資料驅動與模型驅動
今天看到一篇大資料gis的文章,文章中講到了資料驅動的空間分析和挖掘。摘自李清泉,李德仁,2014 大資料gis 資料的極大豐富使人們可以逐漸擺脫對模型和假設的依賴。對於大資料時代,谷歌的研究主管peter norvig 有一句名言 all models are wrong,and increasi...