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 表达式获取

  • 相关阅读:
    退货给供应商批次库存不足时不能退其他供应商
    sqlserver删除重新安装,需要删除的注册表键值
    pb ole intercontrol 控制document的大小
    获取金额的大写格式
    pb 数字转化为大写金额
    js 轮播 flash
    sql:字符串按照某个字符分割后取第几个字符串
    split函数
    WEB2.0概念概述
    推荐所有的.NET开发人员阅读《J2EE Development without EJB》
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/10909512.html
Copyright © 2011-2022 走看看