这里的数据处理,指的是页面上的数据与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 表达式获取

java之struts2的数据处理的更多相关文章

  1. 微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决

    微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决 echostr校验失败,请您检查是否正确解密并输出明文echostr 异常java.securi ...

  2. Java之struts2框架学习

    Java之struts2框架学习 About Struts2 Struts也是一款MVC框架 , Struts2是Struts的下一代产品,是在Struts1和WebWork的技术基础上进行了合并的全 ...

  3. java 的 struts2 Spring Hibernate 三大框架的整合

    原理就不说了,直接上配置文件及代码,用来备用 首先,将三大框架所需要的jar包导入项目中 导入  struts2-spring-plugin-2.3.3.jar包  此包的作用是作为struts2 与 ...

  4. Struts2(3) —— 数据处理

    Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:ValueStack一种数据结构,操作数据的方式为 ...

  5. Java框架Struts2

    struts2的核心和工作原理   在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于we ...

  6. [Java Web]Struts2解决中文乱码问题

    1.设置struts的字符编码,能够在struts.xml中添加下面代码: <constant name="struts.i18n.encoding" value=" ...

  7. [Java Web]Struts2加起来(一个)

    Struts2环境配置 进口Struts2的需要jar包 在WEB-INF/classes(src)文件夹下创建struts.xml文件 在web.xml文件里加入Struts过滤器信息 经常使用配置 ...

  8. java里Struts2学习登录练习详解

    最近在学struts2里面遇到很多错误,今天跟大家分享一下,我的开发工具是Eclipse: 1.到网上下载Struts2的包,这里不再累赘,百度有很多: 2.新建一个项目,记得后面加上web.xml文 ...

  9. JAVA框架Struts2 servlet API

    一:servlet API 1)完全解耦接口: 使用ActionContext类进行相关操作: package jd.com.actioncontex; import com.opensymphony ...

随机推荐

  1. Server concepts 详解

    server status 是由 vm_state和task_state 计算出来的,vm_state是虚机当前的稳定状态(例如Active, Error),task_state是虚机当前的瞬间状态( ...

  2. 刷题记录:[SUCTF 2019]CheckIn

    目录 刷题记录:[SUCTF 2019]CheckIn 一.涉及知识点 1.利用.user.ini上传\隐藏后门 2.绕过exif_imagetype()的奇技淫巧 二.解题方法 刷题记录:[SUCT ...

  3. [RoarCTF 2019]simple_uplod

    目录 [RoarCTF 2019]simple_uplod 1.ThinkPHP文件上传 2.upload()多文件上传 ThinkPHP上传文件名暴破 [RoarCTF 2019]simple_up ...

  4. css3学习之--transition属性(过渡)

    一.理解transition属性 W3C标准中对CSS3的transition是这样描述的: CSS的transition允许CSS的属性值在一定的时间区间内平滑地过渡.这种效果可以在鼠标单击,获得焦 ...

  5. hangfire控制台应用程序中添加控制面板

    1.使用nuget 管理包安装 Microsoft.AspNet.WebApi.OwinSelfHost 2.根目录添加新建类 名为:Startup.cs public class Startup { ...

  6. how does SELECT TOP works when no order by is specified?

    how does SELECT TOP works when no order by is specified? There is no guarantee which two rows you ge ...

  7. sqlite数据库使用具体案例以及mysqlite.db数据库

    本文操作是测试数据库的其中一张表,其中包括清空sqlite数据库MyGroup表中的数据,清空sqlite数据库sqlite_sequence表中的自增变量,sqlite数据库MyGroup直接插入数 ...

  8. Redis 操作帮助类

    首先从Nuget中添加StackExchange.Redis包 1.Redis连接对象管理帮助类 using Mvc.Base; using Mvc.Base.Log; using StackExch ...

  9. win10无法运行phantomjs

    @参考文章 echarts利用phantomjs将 图片保存到电脑,在win7下好好的,在win10下报错: 'phantomjs' 不是内部或外部命令,也不是可运行的程序或批处理文件. 在win7下 ...

  10. 查看已安装dpkg包的poinst安装文件

    /var/lib/dpkg/info |grep printburn(软件名称) /var/lib/dpkg/info 文件都在这个目录下面poinst, preinst,prerm等