zoukankan      html  css  js  c++  java
  • java之struts2的数据处理

    这里的数据处理,指的是页面上的数据与Action中的数据的处理。

    struts2中有3种方式来接收请求提交的数据。分别是:属性驱动方式、对象驱动方式、模型驱动方式

    1. 属性驱动方式

    要求页面中的表单项的名称与Action处理类中的属性名一样,

    并且在Action处理类中提供属性的get/set方法。这样就可以在Action处理方法中获取表单中的数据值了。

    如果是转发,也可以在页面中通过el表达式把Action处理类的属性值获取到${属性名}。

    add.jsp

    <body>
        <form action="add.action" method="post">
        用户名:<input type="text" name="name"/><br/>
        年龄:<input type="text" name="age"/><br/>
        性别:<input type="text" name="sex"/><br/>
        电话:<input type="text" name="phone"/><br/>
        <input type="submit" value="submit"/>
        </form>
    </body>

    UserAction.java

    public class UserAction {
        //属性名必须和表单项的名称一致,注意命名规范,并且提供get/set方法
        private String name;
        private int age;
        private String sex;
        private String phone;
        //处理结果信息
        private String msg;
        //用户的添加处理方法
        public String add(){
            System.out.println("name="+name+"	age="+age+"	sex="+sex+"	phone="+phone);
            msg="添加用户成功";
            return Action.SUCCESS;
        }
    public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }

    struts2会做基本的数据类型转换。

    2.对象驱动方式

    在servlet处理中,获取表单项的值后,需要手动创建对象。

    在struts2中,提供了一种对象驱动方式,可以直接在Action处理类中获取对象,不再需要手动创建对象。

    这种方式需要在处理类中声明对象属性,在表单项的名称由 对象名.对象属性名 组成。

    User 对象

    public class User {
        private String name;
        private int age;
        private String sex;
        private String phone;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public String getPhone() {
            return phone;
        }
        public void setPhone(String phone) {
            this.phone = phone;
        }
    }

    addObject.jsp 页面

    <body>
        <form action="addObject.action" method="post">
        用户名:<input type="text" name="user.name"/><br/>
        年龄:<input type="text" name="user.age"/><br/>
        性别:<input type="text" name="user.sex"/><br/>
        电话:<input type="text" name="user.phone"/><br/>
        <input type="submit" value="submit"/>
        </form>
    </body>

    UserObjectAction 处理类

    public class UserObjectAction {
        private User user;
        private String msg;
    public String add(){ System.out.println("name="+user.getName()+" age="+user.getAge()+" sex="+user.getSex()+" phone="+user.getPhone()); msg="数据获取成功"; return Action.SUCCESS; }
    public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }

    通常使用对象驱动方式

    3.模型驱动方式

    在对象驱动方式上,可以实现在处理类中直接获取对象,但是对象驱动方式相比属性驱动方式,页面的编写更复杂(多写了对象属性名),

    当属性非常多时,编写效率降低。所以,strut2提供了模型驱动。

    模型驱动综合了属性驱动和对象驱动的优点,但是模型驱动具有侵入性。

    使用模型驱动处理类,需要实现 ModelDriven 接口 。

    User 类

    public class User {
        private String name;
        private int age;
        private String sex;
        private String phone;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public String getPhone() {
            return phone;
        }
        public void setPhone(String phone) {
            this.phone = phone;
        }
    }

    AddModel.jsp

    <form action="addModel.action" method="post">
        用户名:<input type="text" name="name"/><br/>
        年龄:<input type="text" name="age"/><br/>
        性别:<input type="text" name="sex"/><br/>
        电话:<input type="text" name="phone"/><br/>
        <input type="submit" value="submit"/>
        </form>

    UserModelAction

    public class UserModelAction implements ModelDriven<User>{
        private User user= new User();
        private    String msg;
        public String add(){
            System.out.println("name="+user.getName()+"	age="+user.getAge()+"	sex="+user.getSex()+"	phone="+user.getPhone());
            msg="数据获取成功";
            return Action.SUCCESS;
        }
        @Override
        public User getModel() {
            return user;
        }
        public User getUser() {
            return user;
        }
        public void setUser(User user) {
            this.user = user;
        }
        public String getMsg() {
            return msg;
        }
        public void setMsg(String msg) {
            this.msg = msg;
        }
    }

    总结:

    从3种获取表单数据的方式中,可以看出,当不需要再处理类中获取对象时,应该采用属性驱动;

    当属性较少,并且需要在处理类中获取对象时应该采用对象驱动;

    当属性较多,并且需要在处理类中获取对象时应该采用模型驱动;

    实际开发中,跟团队保持一致。一般都是在对象驱动和模型驱动中选择

    补充:

    响应数据

    在页面中获取struts2的响应数据有2个要点:

      1.获取的数据必须是处理类的属性,并且提供了get/set 方法

      2.在页面中可以通过 el 和 jstl 获取数据,也可以通过 ognl 表达式获取

  • 相关阅读:
    【POJ 1958】 Strange Towers of Hanoi
    【HNOI 2003】 激光炸弹
    【POJ 3263】 Tallest Cow
    【POJ 2689】 Prime Distance
    【POJ 2777】 Count Color
    【POJ 1995】 Raising Modulo Numbers
    【POJ 1845】 Sumdiv
    6月16日省中集训题解
    【TJOI 2018】数学计算
    【POJ 1275】 Cashier Employment
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/10909512.html
Copyright © 2011-2022 走看看