Struts2的数据封装

一、最原始的数据分装方式

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="提交">
    </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="提交">
    </form>
</body>

测试项目代码:Struts2_02.zip

原文地址:https://www.cnblogs.com/jack1995/p/6964655.html