歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Stucts2 頁面上的值如何與Action的屬性值對應

在Strut2中,頁面的數據和Action有兩種基本對應方式:分別是:屬性驅動(FieldDriven)和模型驅動(ModelDriven)。屬性驅動又分為兩種情況:一種是基本數據類型的屬性對應:另一種是JavaBean風格的屬性對應。下面就分別來看看它們是什麼意思都如何實現。

屬性驅動(FieldDriven):基本數據類型的屬性對應

在index.jsp中,我是這樣寫的

<form action="helloWorldAction.action" method="post">
    賬號:<input type="text" name="account"/><br>
    密碼:<input type="password" name="password"/>
    <input type="submit" value="提交"/>
  </form>

在Action中是這樣寫的

public class HelloWorldAction extends ActionSupport{
 
    private String account;
    private String password;
   
    public String getAccount() {
        return account;
    }
    public void setAccount(String account) {
        this.account = account;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
   
    //其他代碼省略....
}
可以發現,在頁面上index.jsp的name的屬性,和Action的屬性是同一個名稱的。這樣一來,當頁面提交的時候,Struts2會自動從request對象裡把數據提取出來,然後按照名稱進行對應,自動設置到Action屬性裡面去。

2.屬性驅動FieldDriven(JavaBean風格的屬性對應)

 (1)先看看域對象的寫法,按照JavaBean的風格來寫,示例代碼如下:

public class HelloWorldModel {
   
    private String account;
    private String password;
    public String getAccount() {
        return account;
    }
    public void setAccount(String account) {
        this.account = account;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}
(2)這時候Action寫法也有變化,主要就是直接使用這個對象,其實就是定義一個屬性就是這樣對象類型,然後為這個屬性提供相應的getter()和setter()方法即可。如果把這個屬性的可訪問屬性設置為public就不需要getter()和setter()方法。Action修改後的示例代碼如下:

 public class HelloWorldAction extends ActionSupport{
 
    private HelloWorldModel hwm =  new HelloWorldModel();
 
    public HelloWorldModel getHwm() {
        return hwm;
    }
 
    public void setHwm(HelloWorldModel hwm) {
        this.hwm = hwm;
    }
    //其他代碼省略....
}

 (3)Action發生變化後,index.jsp頁面中的內容也要進行相應的改變,否則數據就無法正確對應,主要是在相應的name屬性上,添加一個域對象的前綴,指明這個值到底是對應到哪宇哥域對象裡面去,示例如下:

<form action="helloWorldAction.action" method="post">
        賬號:<input type="text" name="hwm.account"/><br>
        密碼:<input type="password" name="hwm.password"/>
        <input type="submit" value="提交"/>
    </form>
</body>

3.模型驅動(ModelDriven)

  它的基本實現方式讓Action實現一個ModelDriven的接口,這個接口需要我們實現getModel的方法。這個方法的返回值就是Action所使用的數據模型對象。修改後的示例代碼如下:

 public class HelloWorldAction extends ActionSupport implements ModelDriven{
 
    private HelloWorldModel hwm =  new HelloWorldModel();
 
    public Object getModel() {
        // TODO Auto-generated method stub
        return hwm;
    }
    //其他代碼省略....
}

在index.jsp中也需要做相應的調整,主要是是去掉剛才給name屬性添加的hwm前綴。其示例代碼如下:

 <form action="helloWorldAction.action" method="post">
        賬號:<input type="text" name="account"/><br>
        密碼:<input type="password" name="password"/>
        <input type="submit" value="提交"/>
 </form>

為什麼種方式不需要前綴了呢?

  因為使用這種ModelDriven的方式,一個Actiion只能對應一個Model,因此不需要添加前綴,Struts2j就知道,頁面上account的值就對應到這個Model的account屬性。

Struts2學習筆記-Value Stack(值棧)和OGNL表達式  http://www.linuxidc.com/Linux/2015-07/120529.htm 

struts2文件上傳(保存為BLOB格式) http://www.linuxidc.com/Linux/2014-06/102905.htm

Struts2的入門實例 http://www.linuxidc.com/Linux/2013-05/84618.htm

Struts2實現ModelDriven接口 http://www.linuxidc.com/Linux/2014-04/99466.htm

遇到的Struts2文件下載亂碼問題 http://www.linuxidc.com/Linux/2014-03/98990.htm

Struts2整合Spring方法及原理 http://www.linuxidc.com/Linux/2013-12/93692.htm

Struts2 注解模式的幾個知識點 http://www.linuxidc.com/Linux/2013-06/85830.htm

Struts 的詳細介紹:請點這裡
Struts 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved