久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

筆記三,、struts2 的ModeDriven Preparable

 liumw1203 2015-06-30

paramsPrepareParamsStack在Struts 2.0中是一個很奇妙的interceptor stack,以至于很多人疑問為何不將其設(shè)置為默認(rèn)的interceptor stack,。paramsPrepareParamsStack主要解決了ModelDriven和Preparable的配合問題,,從字面上理解來說, 這個stack的攔截器調(diào)用的順序為:首先params,,然后prepare,接下來modelDriven,,最后再params,。Struts 2.0的設(shè)計上要求modelDriven在params之前調(diào)用,而業(yè)務(wù)中prepare要負責(zé)準(zhǔn)備model,,準(zhǔn)備model又需要參數(shù),,這就需要在 prepare之前運行params攔截器設(shè)置相關(guān)參數(shù),這個也就是創(chuàng)建paramsPrepareParamsStack的原因,。流程如下: 


     1. params攔截器首先給action中的相關(guān)參數(shù)賦值,,如id 
     2. prepare攔截器執(zhí)行prepare方法,prepare方法中會根據(jù)參數(shù),,如id,,去調(diào)用業(yè)務(wù)邏輯,設(shè)置model對象 
     3. modelDriven攔截器將model對象壓入value stack,,這里的model對象就是在prepare中創(chuàng)建的 
     4. params攔截器再將參數(shù)賦值給model對象 
     5. action的業(yè)務(wù)邏輯執(zhí)行 依據(jù)此stack

下面是一個例子,,大家看一下吧

public class UserAction extends ActionSupport implements ModelDriven, Preparable{
private User user;
private int id;
private UserService service; // user business service

public void setId(int id) {
   this.id = id;
}
/**
* create a new user if none exists, otherwise load the user with the specified id
*/
public void prepare() throws Exception {
   if( id==0 ) {
      user = new User();
   } else {
      user = service.findUserById(id);
   }
}
public Object getModel() {
return user;
}
/**
* create or update the user and then view the created user
*/
public String update() {
   if( id==0 ) {
     service.create(user);
   } else {
     service.update(user);
}
return "redirect";
}
/**
* delete the user and go to a default home page
*/
public String delete() {
service.deleteById(id);
return "home";
}
/**
* show the page allowing the user to view the existing data 
*/
public String view() {
   return "view";
}
/** 
* show the page allowing the user to view the existing data and change the values 
*/
public String edit() {
   return "input";
}
}
在 上述代碼中,edit和view都不需要根據(jù)id再為界面準(zhǔn)備數(shù)據(jù),,因為prepare方法已經(jīng)準(zhǔn)備好了model,,這些方法很簡單。對于update方 法,,prepare首先會從數(shù)據(jù)庫中加載數(shù)據(jù),,然后params攔截器會將參數(shù)值付給model,在update直接更新就可以,,不會出現(xiàn)數(shù)據(jù)被亂更新的 情況,。象Hibernate框架,會判斷哪些字段更新了,,然后進行更新,,性能也不會損失,。
通過paramsPrepareParamsStack可以讓流程更明確,代碼更簡潔,,也更利于大家的交流,。


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多