1. 程式人生 > >Struts2的數據封裝

Struts2的數據封裝

log 使用 list() 類名 tac pos submit spa logs

一、最原始的數據分裝方式

public class DataDemo1Action extends ActionSupport {
    
    //普通的數據封裝,使用ServletRequestContext來完成。
    
    public String execute(){
        //1、使用ServletActionContext對象的方法得到HttpServletRequest對象
        HttpServletRequest  request =ServletActionContext.getRequest();
        //2、使用request的方法得到數據
String username = request.getParameter("username"); String address = request.getParameter("address"); String tel = request.getParameter("tel"); //3、封裝數據到對象 User user = new User(); user.setUsername(username); user.setAddress(address); user.setTel(tel); System.out.println(user);
return NONE; } }

二、Struts2的屬性封裝方式

public class DataDemo2Action extends ActionSupport {
    
    //屬性封裝的數據封裝
    
    //1、定義變量,變量名稱要和表單輸入項的name屬性中的值一致
        private String username;
        private String address;
        private String tel;
    //2、生成上面變量的getter和setter方法
        public String getUsername() {
            
return username; } public void setUsername(String username) { this.username = username; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } //3、寫action public String execute(){ System.out.println("username:" + username + ",address:" + address + ",tel:" + tel); return NONE; } }

特點:使用屬性封裝獲取表單數據到屬性裏面,不能把數據直接封裝到實體類對象裏面

三、Struts2的驅動模型封裝方式

public class DataDemo3Action extends ActionSupport implements ModelDriven<User>{
    
    /**
     * 1模型驅動的數據封裝,
     * 2該方法需要實現ModelDriven接口
     * 3接口中的泛型是要封裝到的實體類的名稱
     * 4該實體類中屬性的名稱要和表單輸入項中的name屬性的值一致
     */
    
    //1、創建實體類對象
    private User user = new User();
    //2、重寫方法。返回該創建的實體類對象
    @Override
    public User getModel() {    
        return user;
    }
    
    //3、寫action
    public String execute(){
        System.out.println(user);
        return NONE;
    }
}

  註意:在一個action中,獲取表單數據可以使用屬性封裝,也可以使用模型驅動封裝, 不能同時使用屬性封裝和模型驅動封裝獲取同一個表單數據如果同時使用,只會執行模型驅動。

四、Struts2的表達式封裝方式

Java代碼:

public class DataDemo4Action extends ActionSupport{
    
    /**
     * 1表達式的數據封裝,
     * 2該實體類中屬性的名稱要和表單輸入項中的name屬性的值一致
     */
    
    //1、聲明實體類對象
    private User user ;
    //2、生成實體類對象的getter和setter
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    //3、寫action
    public String execute(){
        System.out.println(user);
        return NONE;
    }
    
}

jsp頁面代碼:

<body>
    <!-- 
        表單輸入項裏面的name屬性的值要使用表達式
        表達式格式為:在Action中聲明的實體類類名.實體類中屬性名稱    
     -->
    <form action="${pageContext.request.contextPath}/data4" method="post">
        username:<input type="text" name="user.username"><br/>
        address:<input type="text" name="user.address"><br/>
        tel:<input type="text" name="user.tel"><br/>
        <input type="submit" name="????o¤">
    </form>
</body>

  特點:表達式可以同時封裝同一個表單中的不同的實體類的數據到不同的對象中去,分裝的數據在實體類中。

五、封裝數據到list集合

Java代碼:

public class ListAction extends ActionSupport {
    
    //封裝數據到list集合
    
    //1、聲明該list,泛型為要封裝進入的實體類類名
    private List<User> list;
    //2、生成該list的getter和setter

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

    //3、編寫action
    public String execute(){
        
        for (User user : list) {
            System.out.println(user);
        }
        return NONE;
    }
}

jsp代碼

<body>

    <form action="${pageContext.request.contextPath}/list" method="post">
    <!-- list[0]表示list集合中的第一個對象 -->
        username:<input type="text" name="list[0].username"><br/>
        address:<input type="text" name="list[0].address"><br/>
        tel:<input type="text" name="list[0].tel"><br/>
        <br/><br/>
        <!-- list[1]表示list集合中的第二個對象 -->
        username:<input type="text" name="list[1].username"><br/>
        address:<input type="text" name="list[1].address"><br/>
        tel:<input type="text" name="list[1].tel"><br/>
        <input type="submit" name="提交">
    </form>
</body>

六、封裝數據到Map集合

Java代碼:

public class MapAction extends ActionSupport {
    
    //封裝數據到Map集合
    
    //1、聲明map集合,其中泛型為要封裝的實體類的類名
    Map<String,User> map;
    //2、生成getter和setter
    public Map<String, User> getMap() {
        return map;
    }
    public void setMap(Map<String, User> map) {
        this.map = map;
    }
    //3、編寫Action
    
    public String execute(){
        Set<String> set= map.keySet();
        for (String key : set) {
            User user = map.get(key);
            System.out.println(user);
        }
        return NONE;
    }
}

jsp代碼

<body>

    <form action="${pageContext.request.contextPath}/map" method="post">
    <!-- 
        1、使用表達式語句
        2、在map裏面要設置key。map[‘key值‘]
        3、key值可以隨意
     -->
        username:<input type="text" name="map[‘one‘].username"><br/>
        address:<input type="text" name="map[‘one‘].address"><br/>
        tel:<input type="text" name="map[‘one‘].tel"><br/>
        <br/><br/>
        <!-- 
            1、使用表達式語句
            2、在map裏面要設置key。map[‘key值‘]
            3、key值可以隨意
         -->
        username:<input type="text" name="map[‘abc‘].username"><br/>
        address:<input type="text" name="map[‘abc‘].address"><br/>
        tel:<input type="text" name="map[‘abc‘].tel"><br/>
        <input type="submit" name="????o¤">
    </form>
</body>

測試項目代碼:Struts2_02.zip

Struts2的數據封裝