专栏首页Vincent-yuanjava之struts2的数据处理

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+"\tage="+age+"\tsex="+sex+"\tphone="+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()+"\tage="+user.getAge()+"\tsex="+user.getSex()+"\tphone="+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()+"\tage="+user.getAge()+"\tsex="+user.getSex()+"\tphone="+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 表达式获取

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java之struts2的action优化配置

    当一个Action处理类中处理多个业务时,action的配置 文件将会急剧增加,导致配置文件很臃肿的问题。

    Vincent-yuan
  • java之struts2之文件上传

    1.在大多数应用中,都有文件上传功能。有两种文件上传的方式,一种是自己去解析http协议,获取文件上传的内容。另一种是通过第三方插件来实现文件上传。第三方插件一...

    Vincent-yuan
  • 前端学习(26)~js学习(四):基本数据类型vs引用数据类型

    上面的代码中:a 和 b 都是基本数据类型,让 b 等于 a,然后改变 a 的值之后,发现 b 的值并没有被改变。

    Vincent-yuan
  • 聊聊NacosNamingService的selectOneHealthyInstance

    本文主要研究一下NacosNamingService的selectOneHealthyInstance

    codecraft
  • 聊聊NacosNamingService的selectOneHealthyInstance

    本文主要研究一下NacosNamingService的selectOneHealthyInstance

    codecraft
  • 软件工程六大设计原则总结,案例演示

    知了一笑
  • 教你用Java字节码做日志脱敏工具

    本篇是本系列的最后一篇,在这篇中教你用ASM实际开发中做一些可用的东西。包括之前说的如何修改toString,完成一些脱敏。

    用户5397975
  • Spring Boot使用Shiro实现登录授权认证

    1、Shiro是Apache下的一个开源项目,我们称之为Apache Shiro。它是一个很易用与Java项目的的安全框架,提供了认证、授权、加密、会话管理,与...

    朝雨忆轻尘
  • Aptana的破解

    最近写JS比较多,常常苦恼与没有一个顺手的IDE。Editplus虽然用的熟,不过那个的效率太低而且代码看起来也很不方便,经过一个多月的试用,发现了一款好用的编...

    大江小浪
  • Spring boot整合shiro权限管理

    二十三年蝉

扫码关注云+社区

领取腾讯云代金券