<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-126  評論-247  文章-5  trackbacks-0

    成為 Action 的條件

    Struts2 對成為 Action 的類的要求很寬松,通常,有下面的幾種方式可供選擇:
    a. 實現(xiàn) com.opensymphony.xwork2.Action 接口
    b. 繼承 com.opensymphony.xwork2.ActionSupport 類
    c. 一個簡單的 POJO 也能成為一個 Action,前提是,你需要給這個類編寫 public String xx ( ) { } 方法

    簡單的 POJO 作為 Action

    package fan.tutorial.action;

    public class Domain1Action {

        public String execute(){
            System.out.println("Domain1Action[execute] was invoked!");
            return "success";
        }

        public String launch(){
            System.out.println("Domain1Action[launch] was invoked!");
            return "success";
        }
    }
    在這里,你所要做的僅僅是編寫 public String xx ( ) { } 方法而已。

    實現(xiàn) Action 接口

    package fan.tutorial.action;

    import com.opensymphony.xwork2.Action;

    public class Domain2Action implements Action {

        public String execute(){
            System.out.println("Domain2Action[execute] was invoked!");
            return SUCCESS;
        }
        
        public String launch(){
            System.out.println("Domain2Action[launch] was invoked!");
            return SUCCESS;
        }
        
    }
    Action 接口非常簡單,僅是聲明了一個抽象的 execute 方法和定義了一些常量,快速看一眼 Action 的源代碼:

    繼承 ActionSupport 類

    package fan.tutorial.action;

    import com.opensymphony.xwork2.ActionSupport;

    public class Domain3Action extends ActionSupport {
        
        private static final long serialVersionUID = 1848203007453752456L;

        public String execute(){
            System.out.println("Domain3Action[execute] was invoked!");
            return SUCCESS;
        }
        
        public String launch(){
            System.out.println("Domain3Action[launch] was invoked!");
            return SUCCESS;
        }
        
    }
    ActionSupport 是已經(jīng)實現(xiàn)了 Action 接口以及其它幾個常用接口的類,例如數(shù)據(jù)驗證接口等。
    這在編程開發(fā)上給我們帶來了一定的便利,下面是 ActionSupport 的部分源代碼:

    Action 接收參數(shù)的方式

    a. 通過 Action 類的屬性域來接收參數(shù)
    b. 通過領(lǐng)域?qū)ο髞斫邮諈?shù)
    c. 通過 ModelDriven 來接收參數(shù)

    通過 Action 類的屬性域來接收參數(shù)

    package fan.tutorial.action;

    import com.opensymphony.xwork2.Action;

    public class FieldAction implements Action {

        private String username;

        public String execute() {
            System.out.println("**************************");
            System.out.println("[FieldAction] username : " + username);
            System.out.println("**************************");
            return null;
        }

        public void setUsername(String username) {
            this.username = username;
        }
    }
    具體的做法是:
    (1)  在 Action 類中定義屬性名稱,如上例的 username
    (2)  為該屬性名稱添加 setter 方法,如上例的 public void setUsername...
    (3)  通過 URL 將參數(shù)傳遞到 Action,如 field.action?username=u

    通過領(lǐng)域?qū)ο髞斫邮諈?shù)

    package fan.tutorial.model;

    public class User {

        private String username;
        private String password;

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        @Override
        public String toString() {
            return "[ username = " + username + ", password = " + password + " ]";
        }
    }
    package fan.tutorial.action;

    import com.opensymphony.xwork2.Action;
    import fan.tutorial.model.User;

    public class ModelAction implements Action {
        
        private User user;
    //  private User user = new User();

        public String execute() {
            System.out.println("**************************");
            System.out.println("[ModelAction] user : " + user);
            System.out.println("**************************");
            return null;
        }

        public User getUser() {
            return user;
        }

        public void setUser(User user) {
            this.user = user;
        }

    }
    具體的做法是:
    (1)  在 Action 類中定義出對象,如上例的 user
    (2)  為該對象添加 setter 和 getter 方法,如上例的 setUser... 和 getUser... 方法
    (3)  通過 URL 將參數(shù)傳遞到 Action,如 model.action?user.username=u&user.password=p
    以這種方式接收參數(shù)的特點是:
    (1)  Action 類中的目標(biāo)對象你可以選擇自己來 new 一個,如上例注釋掉的那行。
    (2)  Action 類中的目標(biāo)對象你也可以選擇不自己來 new,Struts2 在嘗試獲取 URL 中目標(biāo)對象的引用時,當(dāng)它發(fā)現(xiàn)目標(biāo)對象 user 為 null 時,它會通過反射來調(diào)用目標(biāo)類 User 的無參構(gòu)造方法來創(chuàng)建出一個目標(biāo)類的實例,然后再調(diào)用該實例的 setUsername 和 setPassword 方法來將 URL 中傳遞過來的參數(shù)填充進(jìn)對象里面。因此,如果你選擇不自己 new 目標(biāo)對象,那么你必須確保目標(biāo)類擁有一個無參的構(gòu)造法。
    (3)  參數(shù)發(fā)送的方式為:對象名稱.對象屬性名稱。如上例 model.action?user.username=u

    通過 ModelDriven 來接收參數(shù)

    package fan.tutorial.action;

    import com.opensymphony.xwork2.Action;
    import com.opensymphony.xwork2.ModelDriven;
    import fan.tutorial.model.User;

    public class ModelDrivenAction implements Action, ModelDriven<User> {
        
        private User user = new User();

        public String execute() {
            System.out.println("**************************");
            System.out.println("[ModelDrivenAction] user : " + user);
            System.out.println("**************************");
            return null;
        }

        public User getModel() {
            return user;
        }

    }
    具體的做法是:
    (1)  在 Action 類中實現(xiàn) ModelDriven 接口,并實現(xiàn) getModel() 方法
    (2)  在 getModel() 方法中必須手動創(chuàng)建對象并返回該對象的引用
    (3)  通過 URL 將參數(shù)傳遞到 Action,如 model_driven.action?username=u&password=p
    以這種方式接收參數(shù)的特點是:
    (1)  你必須手動創(chuàng)建目標(biāo)的對象
    (2)  參數(shù)發(fā)送的時候不需要帶上對象的名稱,如上例的 model_driven.action?username=u

    文章示例源碼下載

    struts-action.zip





      
    posted on 2014-03-13 16:49 fancydeepin 閱讀(1537) 評論(8)  編輯  收藏

    評論:
    # re: Struts2 Action 2014-03-14 08:21 | 金利鎖業(yè)
    期待博主更新吧  回復(fù)  更多評論
      
    # re: Struts2 Action 2014-03-14 09:38 | 魏五鎖業(yè)
    支持博主分享  回復(fù)  更多評論
      
    # 港城婚紗 2014-03-14 16:07 | 婚紗攝影
    話說么看懂。。  回復(fù)  更多評論
      
    # re: Struts2 Action 2014-03-15 08:29 | 鵬達(dá)鎖業(yè)
    支持博主分享  回復(fù)  更多評論
      
    # re: Struts2 Action 2014-03-15 10:46 | 金利鎖業(yè)
    期待更新啊  回復(fù)  更多評論
      
    # re: Struts2 Action 2014-03-16 11:45 | 金利鎖業(yè)
    支持博主分享  回復(fù)  更多評論
      
    # re: Struts2 Action 2014-03-17 08:24 | 鵬達(dá)鎖業(yè)
    支持博主分享  回復(fù)  更多評論
      
    # re: Struts2 Action 2014-04-05 18:17 | sailboats
    贊一個!  回復(fù)  更多評論
      

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲黄色网址大全| 亚洲午夜久久影院| 亚洲成a人片在线观看天堂无码| 午夜免费1000部| 亚洲精品国产情侣av在线| 国产白丝无码免费视频| 久久综合九九亚洲一区| 97在线免费视频| 亚洲好看的理论片电影| 最刺激黄a大片免费网站| 亚洲美女视频网址| 麻豆视频免费播放| 99亚偷拍自图区亚洲| 国产成人免费a在线视频app| 麻豆一区二区三区蜜桃免费| 亚洲欧洲久久av| 国产一区二区免费| 亚洲精品午夜视频| 扒开双腿猛进入爽爽免费视频| 亚洲国产精品日韩av不卡在线 | 亚洲国产精品免费观看| 巨胸喷奶水视频www网免费| 极品色天使在线婷婷天堂亚洲| 免费人妻av无码专区| 国产永久免费高清在线| 911精品国产亚洲日本美国韩国 | 免费h成人黄漫画嘿咻破解版| 夜夜爽妓女8888视频免费观看| 亚洲精品狼友在线播放| 免费三级毛片电影片| 成人婷婷网色偷偷亚洲男人的天堂| 亚洲无码黄色网址| 7m凹凸精品分类大全免费| 亚洲色偷偷综合亚洲av78| 亚洲一区二区三区国产精品| 久久这里只精品99re免费 | 精品亚洲成a人在线观看| 久久久久亚洲av毛片大| 国产成人精品免费视| 免费大片av手机看片| 亚洲国产精品久久久久久|