<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. 實現 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 ( ) { } 方法而已。

    實現 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 是已經實現了 Action 接口以及其它幾個常用接口的類,例如數據驗證接口等。
    這在編程開發上給我們帶來了一定的便利,下面是 ActionSupport 的部分源代碼:

    Action 接收參數的方式

    a. 通過 Action 類的屬性域來接收參數
    b. 通過領域對象來接收參數
    c. 通過 ModelDriven 來接收參數

    通過 Action 類的屬性域來接收參數

    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 將參數傳遞到 Action,如 field.action?username=u

    通過領域對象來接收參數

    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 將參數傳遞到 Action,如 model.action?user.username=u&user.password=p
    以這種方式接收參數的特點是:
    (1)  Action 類中的目標對象你可以選擇自己來 new 一個,如上例注釋掉的那行。
    (2)  Action 類中的目標對象你也可以選擇不自己來 new,Struts2 在嘗試獲取 URL 中目標對象的引用時,當它發現目標對象 user 為 null 時,它會通過反射來調用目標類 User 的無參構造方法來創建出一個目標類的實例,然后再調用該實例的 setUsername 和 setPassword 方法來將 URL 中傳遞過來的參數填充進對象里面。因此,如果你選擇不自己 new 目標對象,那么你必須確保目標類擁有一個無參的構造法。
    (3)  參數發送的方式為:對象名稱.對象屬性名稱。如上例 model.action?user.username=u

    通過 ModelDriven 來接收參數

    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 類中實現 ModelDriven 接口,并實現 getModel() 方法
    (2)  在 getModel() 方法中必須手動創建對象并返回該對象的引用
    (3)  通過 URL 將參數傳遞到 Action,如 model_driven.action?username=u&password=p
    以這種方式接收參數的特點是:
    (1)  你必須手動創建目標的對象
    (2)  參數發送的時候不需要帶上對象的名稱,如上例的 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 | 金利鎖業
    期待博主更新吧  回復  更多評論
      
    # re: Struts2 Action 2014-03-14 09:38 | 魏五鎖業
    支持博主分享  回復  更多評論
      
    # 港城婚紗 2014-03-14 16:07 | 婚紗攝影
    話說么看懂。。  回復  更多評論
      
    # re: Struts2 Action 2014-03-15 08:29 | 鵬達鎖業
    支持博主分享  回復  更多評論
      
    # re: Struts2 Action 2014-03-15 10:46 | 金利鎖業
    期待更新啊  回復  更多評論
      
    # re: Struts2 Action 2014-03-16 11:45 | 金利鎖業
    支持博主分享  回復  更多評論
      
    # re: Struts2 Action 2014-03-17 08:24 | 鵬達鎖業
    支持博主分享  回復  更多評論
      
    # re: Struts2 Action 2014-04-05 18:17 | sailboats
    贊一個!  回復  更多評論
      

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


    網站導航:
     
    主站蜘蛛池模板: 在线观看国产情趣免费视频| 全亚洲最新黄色特级网站| 99久在线国内在线播放免费观看| 亚洲av无码一区二区三区人妖| 国产成人精品日本亚洲专区6| 亚洲一区精彩视频| 亚洲综合精品第一页| 国产成人 亚洲欧洲| 男女拍拍拍免费视频网站| a一级爱做片免费| 拍拍拍无挡免费视频网站| 1000部无遮挡拍拍拍免费视频观看| 亚色九九九全国免费视频| 无码人妻久久一区二区三区免费丨 | 午夜两性色视频免费网站| 四虎成人免费网址在线| 国产成人精品曰本亚洲79ren| 久久夜色精品国产亚洲av| 亚洲午夜电影一区二区三区| 老司机精品视频免费| a在线免费观看视频| 曰批视频免费30分钟成人| 中文亚洲AV片不卡在线观看| 一区二区三区亚洲| 美国毛片亚洲社区在线观看| aa在线免费观看| 性色av免费观看| 亚洲国产精品VA在线观看麻豆| 亚洲AV日韩AV无码污污网站| 日本在线免费播放| 亚洲精品国产精品乱码不卡| 亚洲国产精品线观看不卡| 一级毛片试看60分钟免费播放| AV片在线观看免费| 亚洲免费视频网站| 大地影院MV在线观看视频免费 | 成人性生活免费视频| 亚洲不卡视频在线观看| 免费一级毛片在线播放视频| 亚洲人成影院在线无码按摩店| 亚洲av成人一区二区三区观看在线|