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 表达式获取
java之struts2的数据处理的更多相关文章
- 微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决
微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决 echostr校验失败,请您检查是否正确解密并输出明文echostr 异常java.securi ...
- Java之struts2框架学习
Java之struts2框架学习 About Struts2 Struts也是一款MVC框架 , Struts2是Struts的下一代产品,是在Struts1和WebWork的技术基础上进行了合并的全 ...
- java 的 struts2 Spring Hibernate 三大框架的整合
原理就不说了,直接上配置文件及代码,用来备用 首先,将三大框架所需要的jar包导入项目中 导入 struts2-spring-plugin-2.3.3.jar包 此包的作用是作为struts2 与 ...
- Struts2(3) —— 数据处理
Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:ValueStack一种数据结构,操作数据的方式为 ...
- Java框架Struts2
struts2的核心和工作原理 在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于we ...
- [Java Web]Struts2解决中文乱码问题
1.设置struts的字符编码,能够在struts.xml中添加下面代码: <constant name="struts.i18n.encoding" value=" ...
- [Java Web]Struts2加起来(一个)
Struts2环境配置 进口Struts2的需要jar包 在WEB-INF/classes(src)文件夹下创建struts.xml文件 在web.xml文件里加入Struts过滤器信息 经常使用配置 ...
- java里Struts2学习登录练习详解
最近在学struts2里面遇到很多错误,今天跟大家分享一下,我的开发工具是Eclipse: 1.到网上下载Struts2的包,这里不再累赘,百度有很多: 2.新建一个项目,记得后面加上web.xml文 ...
- JAVA框架Struts2 servlet API
一:servlet API 1)完全解耦接口: 使用ActionContext类进行相关操作: package jd.com.actioncontex; import com.opensymphony ...
随机推荐
- 你对SQA的职责和工作活动(如软件度量)的理解?
SQA就是独立于软件开发的项目组,通过对软件开发过程的监控,来保证软件的开发流程按照指定的CMM规程(如果有相应的CMM规程),对于不符合项及时提出建议和改进方案,必要时可以向高层经理汇报以求问题的解 ...
- mysql 日期处理
mysql> select curdate(); +------------+ | curdate() | +------------+ | -- | +------------+ row in ...
- vim配置无插件
其实,vim插件会影响编辑器的启动速度,虽然有些插件影响不大,我依然觉得不够,其实通过简易的状态栏,可以显示必要的信息,能自定义颜色和背景甚至透明就足够了. 一.自定义状态栏其实以下内容可以写在一行上 ...
- Dubbo+Zookeeper的简单入门案例
1.1 Dubbo简介 Apache Dubbo是一款高性能的Java RPC框架.其前身是阿里巴巴公司开源的一个高性能.轻量级的开源Java RPC框架,可以和Spring框架无缝集成. 什么是R ...
- ubuntu之路——day12.1 不用tf和torch 只用python的numpy在较为底层的阶段实现简单神经网络
首先感谢这位博主整理的Andrew Ng的deeplearning.ai的相关作业:https://blog.csdn.net/u013733326/article/details/79827273 ...
- 【大数据作业十】分布式文件系统HDFS 练习
作业要求来自: https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3292 利用Shell命令与HDFS进行交互 以”./bin/dfs ...
- [Beta]第十次 Scrum Meeting
[Beta]第十次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/5/20 22:00 20min 大运村公寓6F寝室 附Github仓库:WEDO 例会照片 工作情况 ...
- 【CNN】--- 卷积过程中RGB与灰度的区别
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/hacker_Dem_br/article/ ...
- ai segmentation
不只是医学图像啊,自然图像分割用unet也能取得非常好的效果.搞过kaggle语义分割的比赛carvana.感觉最好用的还是unet,其次linknet和提拉米苏也好用.large kernel也不错 ...
- Java基础 三目运算符 在嵌套时,使用括号
JDK :OpenJDK-11 OS :CentOS 7.6.1810 IDE :Eclipse 2019‑03 typesetting :Markdown code ...