1. 程式人生 > >struts2獲取表單數據之 屬性封裝 模型驅動 表達式封裝 對象封裝到list集合 對象封裝到map集合 五種方便的封裝方式

struts2獲取表單數據之 屬性封裝 模型驅動 表達式封裝 對象封裝到list集合 對象封裝到map集合 五種方便的封裝方式

demo1 submit namespace auto nbsp return admin user pri

一、屬性封裝

  屬性封裝是在action裏面設定屬性值,屬性名字一定要和表單中的name一樣,action中extends ActionSupport

  demo1.jsp:

  <body>
    This is my login JSP page. <br>
    <form action="demo1.action" method="post" >
    username<input type="text" name="username"><br><!-- name和屬性名稱一樣 -->
    password
<input type="text" name="password"><!-- name和屬性名稱一樣 --> <input type="submit"> </form> </body>

  action:

public class Damo1Action extends ActionSupport {
    private String username;//屬性名稱和表單name一樣
    private String password;
    //一定要設置get set方法
    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; } public String demo1(){ System.out.println(username
+"\n"+password);//直接即可獲取值 return "go"; } }

  struts2相關配置:

        <package name="com.demo.test" extends="struts-default" namespace="/">
            <action name="demo1" method="demo1" class="com.demo.test.Damo1Action"><!-- 屬性封裝 -->
                <result name="go">/index.jsp</result>
            </action>
        </package>

================================================================================================================================================================

二、模型驅動封裝

  直接將表單數據封裝在javabean對象中

struts2的相關配置:

            <action name="demo2" method="demo2" class="com.demo.test.Damo2Action"><!-- 模型驅動封裝 -->
                <result name="go">/index.jsp</result>
            </action>

user實體類,兩個屬性

/**
 * 用於demo2的user實體類
 * @author Administrator
 *
 */
public class User {
    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 "User [username=" + username + ", password=" + password + "]";
    }
    
}

表單頁面與demo1公用

action:

註意要實現接口ModelDriven

public class Damo2Action implements ModelDriven<User>{//實現接口ModelDriven 並且有個泛型,泛型是實體類對象
    private User user=new User();//new一個全局user對象
    @Override
    public User getModel() {//獲得模型的方法,不需要調用
        // TODO Auto-generated method stub
        return user;//返回user對象
    }
    public String demo2(){
        System.out.println(user);//直接顯示user
        return "go";
    }
}

================================================================================================================================================================

三、表達式封裝

  表達式封裝可以將一個表單內的數據封裝到不同對象中

  jsp頁面:

  <body>
    This is my login JSP page. <br>
    <form action="demo3.action" method="post" >
    username<input type="text" name="user.username"><br><!-- name中的user是實體類對象而不是類名 -->
    password<input type="text" name="user.password"><!-- 通過指向不同的實體類對象就可以將一個表單頁面中的內容封裝到多個對象中 -->
    <input type="submit">
    </form>
  </body>

action代碼

聲明user對象,寫出對象的get set 方法

public class Damo3Action extends ActionSupport{
    private User user;
    public User getUser(){
        return user;
    }
    public void setUser(User user){
        this.user=user;
    }
    public String demo3(){
        System.out.println(user);//直接顯示user
        return "go";
    }
}

struts2中的配置

            <action name="demo3" method="demo3" class="com.demo.test.Damo3Action"><!-- 表達式封裝 -->
                <result name="go">/index.jsp</result>
            </action>

======================================================================================================================================

四、表單數據封裝到list

list可以將表單數據封裝到多個同一實體類的不同對象中

jsp頁面:

  <body>
    This is my login JSP page. <br>
    <form action="demo4.action" method="post" >
    username<input type="text" name="list[0].username"><br>
    password<input type="text" name="list[0].password"><!-- 表單輸入的值就是list中第0個對象的password屬性值 -->
    <input type="submit">
    </form>
  </body>

action:

list要聲明get set集合

public class Damo4Action extends ActionSupport{
    List<User> list;
    
    public String demo4(){
        System.out.println(list.get(0).getUsername());//獲取list集合中的第0個對象並且獲得username
        System.out.println(list.get(0).getPassword());
        return "go";
    }
//    list集合的get set集合
    public List<User> getList() {
        return list;
    }

    public void setList(List<User> list) {
        this.list = list;
    }
}

struts2相關配置

            <action name="demo4" method="demo4" class="com.demo.test.Damo4Action"><!-- 表達式封裝 -->
                <result name="go">/index.jsp</result>
            </action>

======================================================================================================================================================

五、數據對次昂封裝到Map集合中

Map集合為鍵值對形式,使用key可以獲得相應value

jsp頁面

  <body>
    This is my login JSP page. <br>
    <form action="demo4.action" method="post" >
    username<input type="text" name="map[‘one‘].username"><br>
    password<input type="text" name="map[‘one‘].password"><!-- 表單輸入的值就是map中key為one對象的password屬性值 -->
    <input type="submit">
    </form>
  </body>

action:

public class Damo5Action extends ActionSupport{
    Map<String ,User> map;//聲明map
    public String demo4(){
        System.out.println(map.get("one").getUsername());//獲取map集合中key為one對象並且獲得username
        System.out.println(map.get("one").getPassword());
        return "go";
    }
//    map集合的get set集合
    public Map<String, User> getMap() {
        return map;
    }
    public void setMap(Map<String, User> map) {
        this.map = map;
    }
    
}

struts2配置

            <action name="demo5" method="demo5" class="com.demo.test.Damo5Action"><!-- 表達式封裝 -->
                <result name="go">/index.jsp</result>
            </action>

總結

以上總計五種方式,最常用的是第二種方式 模型驅動封裝,可以直接獲得實體類對象,註意name屬性和屬性名稱一定要相同,否則不能傳值,缺點是只能封裝到一個實體類中,若要封裝到兩個實體類就要使用第三種方式

struts2獲取表單數據之 屬性封裝 模型驅動 表達式封裝 對象封裝到list集合 對象封裝到map集合 五種方便的封裝方式