隨筆-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 閱讀(1539) 評論(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
          贊一個!  回復  更多評論
            

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


          網站導航:
           
          主站蜘蛛池模板: 霍城县| 博湖县| 尉犁县| 河南省| 岚皋县| 青阳县| 泗水县| 河北省| 张家港市| 南康市| 新巴尔虎左旗| 玛沁县| 凭祥市| 磐安县| 高碑店市| 甘孜县| 开封市| 固安县| 林州市| 乌什县| 湖口县| 岚皋县| 灵石县| 师宗县| 太原市| 青浦区| 乌拉特中旗| 深水埗区| 长葛市| 铜鼓县| 内乡县| 韶关市| 海南省| 南宁市| 龙山县| 界首市| 宁德市| 宝清县| 灵丘县| 永修县| 体育|