在很多的实际开发场景中,页面提交请求参数Action ,在Action中接收参数并对接收的数据进行封装。封装到一个JavaBean中,将JavaBean传递给业务层中。Struts2数据封装分为两类:属性驱动,模型驱动。

1.模型驱动

通过实现ModelDriven接口来接收请求参数。实现接口并且重写getModel()方法

Action类代码如下:

 package com.huan.web.action;

 import com.huan.domain.Customer;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven; public class CustomerAction extends ActionSupport implements ModelDriven<Customer>{ private Customer customer=new Customer(); public String add(){
System.out.println(customer); return "saveSuccess";
} @Override
public Customer getModel() { return customer;
} }

jsp页面

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>处理请求参数</h1>
<form action="${pageContext.request.contextPath}/Demo10Action.action" >
姓名:<input type="text" name="name"><br/>
年龄:<input type="text" name="age"><br/>
生日:<input type="text" name="birthday"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>

struts.xml

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="param" namespace="/" extends="struts-default">
<action name="Demo10Action" class="com.sturts2.day02.c_param.Demo10Action" method="execute">
<result name="success" type="dispatcher">/form3.jsp</result>
</action> </package>
</struts>

2.属性驱动(很少使用)

在Action中定义java数据类型字段并与表单数据对应,利用这些字段进行数据传递

2.1属性驱动之提供属性的set方法(做为了解)

这中方法要在Action中定义属性并提供属性的set方法,当传递数据变多,Action的属性和set方法也随之变多。会让Action变臃肿,不简洁。

form1.jsp页面

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/Demo8Action">
用户名:<input type="text" name="name" /><br>
年龄:<input type="text" name="age" /><br>
生日:<input type="text" name="birthday" /><br>
<input type="submit" value="提交" />
</form>
</body>
</html>

Demo8Action.java 即Action类

 package com.sturts2.day02.c_param;

 import java.util.Date;

 import com.opensymphony.xwork2.ActionSupport;

 public class Demo8Action extends ActionSupport {
private String name;
private Integer age;
private Date birthday;
public Demo8Action() {
super();
System.out.println("Demo8Action对象创建了");
} public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String execute() throws Exception {
System.out.println("name参数值:"+name+"age参数值:"+age+"birthday参数值"+birthday);
return SUCCESS;
} }

Struts.xml配置

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="param" namespace="/" extends="struts-default"> <action name="Demo8Action" class="com.sturts2.day02.c_param.Demo8Action" method="execute">
<result name="success" type="dispatcher">/form1.jsp</result>
</action> </package>
</struts>

打开form1.jsp页面

输上数据并提交,控制台显示

浏览器显示: URL不变请求转发到form.jsp页面

2.2页面提供表达式方式

在页面表单上显示表达式:

     <form action="${pageContext.request.contextPath}/Demo9Action">
用户名:<input type="text" name="user.name" /><br>
年龄:<input type="text" name="user.age" /><br>
生日:<input type="text" name="user.birthday" /><br>
<input type="submit" value="提交" />
</form>

Action类

 public class Demo9Action extends ActionSupport{
private User user; @Override
public String execute() throws Exception {
System.out.println(user);
return SUCCESS;
}
//需要提供get方法 public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} }

还需要提供User的实体类:

属性值要和表单上name属性值对应

 public class User {
private String name;
private Integer age;
private Date birthday;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "User [ name="+name+"\n age="+age+"\n birthday="+birthday+"]";
} }

Struts.xml 的action配置就不做显示

把程序在服务器运行,打开页面填上数据:

控制台显示

 浏览器请求转发到form2.jsp页面

3.Struts2中封装集合类型的数据

在开发中,有时我们需要批量插入用户或者批量插入其他对象。在Action中需要接收多个Action中封装的对象然后传递给业务层。这个时候就需要把表单的信息封装到集合中。一般我们通常使用集合 List或Map

3.1 封装到List集合中

编写页面:

 <form action="${pageContext.request.contextPath}/Demo9Action.action" >
姓名:<input type="text" name="list[0].name"><br/>
年龄:<input type="text" name="list[0].age"><br/>
生日:<input type="text" name="list[0].birthday"><br/>
姓名:<input type="text" name="list[1].name"><br/>
年龄:<input type="text" name="list[1].age"><br/>
生日:<input type="text" name="list[1].birthday"><br/>
<input type="submit" value="提交">
</form>

编写Action:

 public class Demo9Action extends ActionSupport{
private List<User> list; @Override
public String execute() throws Exception {
for(User user :list){
System.out.println(user); }
return SUCCESS;
} public List<User> getUser() {
return list;
} public void setUser(List<User> list) {
this.list = list;
}

3.2 封装数据到Map集合:

页面:

 <form action="${pageContext.request.contextPath}/Demo10Action.action" >
姓名:<input type="text" name="map['one'].name"><br/>
年龄:<input type="text" name="map['one'].age"><br/>
生日:<input type="text" name="map['one'].birthday"><br/>
姓名:<input type="text" name="map['two'].name"><br/>
年龄:<input type="text" name="map['two].age"><br/>
生日:<input type="text" name="map['two'].birthday"><br/>
<input type="submit" value="提交">
</form>

Action类:

 public class Demo10Action extends ActionSupport{
private Map<String ,User> map; @Override
public String execute() throws Exception {
for(Stirng key : map.keySet()){
User user=map.get(key);
System.out.println(key+" "+user); }
return SUCCESS;
} public Map<String ,User> getMap() {
return map;
} public void setMap(Map<String ,User> map) {
this.map = map;
}

Struts2的数据封装的更多相关文章

  1. Struts2中数据封装机制

    Struts2当中数据封装的三种机制:属性驱动.标签驱动.模型驱动.下面来一一介绍. 一.属性驱动 1.需要提供对应属性的set方法进行数据的封装. 2.表单的哪些属性需要封装数据,那么在对应的Act ...

  2. 十一 三种Struts2的数据封装方式,封装页面传递的数据

    Struts2的数据封装:Struts2是一个web层框架,框架是软件的半成品.提供了数据封装的基本功能. 注:Struts2底层(核心过滤器里面的默认栈里面的拦截器,具体见struts-defaul ...

  3. Struts2中类数据封装的方式

    第一种方式:属性驱动提供对应属性的set方法进行数据的封装.表单的哪些属性需要封装数据,那么在对应的Action类中提供该属性的set方法即可.表单中的数据提交,最终找到Action类中的setXxx ...

  4. Struts2中数据封装方式

    一.通过ActionContext类获取 public class ActionContextDemo extends ActionSupport {    @Override    public S ...

  5. Struts2把数据封装到集合中之封装到map中

    struts框架封装数据可以封装到集合中也可以封装到map中,该篇博客主要讲解将数据封装到map中. 1. 封装复杂类型的参数(集合类型 Collection .Map接口等) 2. 需求:页面中有可 ...

  6. Struts2把数据封装到集合中之封装到Collection中

    数据封装到集合中,可以封装到集合中,也可以封装到Map中.该篇博客主要讲解数据封装到集合中的封装到Collection中. 1. 封装复杂类型的参数(集合类型 Collection .Map接口等) ...

  7. Struts2类数据封装

  8. struts2学习笔记(四)——访问Servlet的API&结果跳转&数据封装

    一.Struts2访问Servlet的API 前面已经对Struts2的流程执行完成了,但是如果表单中有参数如何进行接收?又或者我们需要向页面保存一些数据,又要如何完成呢?我们可以通过学习Struts ...

  9. Struts2之Action接收请求参数和拦截器

    技术分析之在Struts2框架中使用Servlet的API        1. 在Action类中也可以获取到Servlet一些常用的API        * 需求:提供JSP的表单页面的数据,在Ac ...

随机推荐

  1. HDU3488 Tour [有向环覆盖 费用流]

    Tour Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submis ...

  2. script 有哪个属性可以让它不立即执行 defer,async

    .async 和 defer 属性 http://blog.csdn.net/qq_34986769/article/details/52155871 1. defer 属性<script sr ...

  3. JDK8的新特性——Lambda表达式

    JDK8已经发布快4年的时间了,现在来谈它的新特性显得略微的有点“不合时宜”.尽管JDK8已不再“新”,但它的重要特性之一——Lambda表达式依然是不被大部分开发者所熟练运用,甚至不被开发者所熟知. ...

  4. 【Tools】Pycharm2017 windows安装与修改中文界面教程

    [windows] 1.到官网下载Pycharm最新版 https://www.jetbrains.com/pycharm/download/#section=windows 2.安装激活 Pycha ...

  5. redis 设置认证密码

    通过修改redis配置文件(redis.conf)修改验证密码.(重启生效) requirepass myRedis 客户端通过密码登录redis并进行操作 redis-cli -h 127.0.0. ...

  6. centos 环境变量配置

    CentOS系统下如何将PHP和mysql命令加入到环境变量中,在Linux CentOS系统上 安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到 ...

  7. 【学习笔记】Hibernate关联映射(Y2-1-6)

    Hibernate关联映射 关联映射就是将关联关系映射到数据库里,在对象模型中就是一个或多个引用. 1.单向多对一关联 准备数据库 部门表和员工表 其中部门表有两列 部门编号和名称 员工表有三列 员工 ...

  8. 关于eclipse安装springide的记录

    近些天,又开始学习springmvc,使用eclipse进行开发,由于很多快捷键时候需要安装springide插件才能出来,我遇到配置DispatcherServlet,结果alt+/出不来Dispa ...

  9. DxPackNet 4.保存音视频为本地avi文件

    捕获到了音视频后要保存到本地文件,这是很常见的应用场景,DxPackNet保存视频文件也比较简单 用 IAviStreamWriter  avi文件写入流即可 1.初始化相关设备,设定好数据捕获的回调 ...

  10. 五子棋的判断输赢规则 -- java编程(简单优化完整版)

    五子棋的判断输赢规则代码 -- 完整优化版 一.前言 之前浏览过很多网上的方法,但总找不到比较完整,也get不到其他大神的思路,就直接画图分析,分析了之后就有了如下的代码,当然还想到更加优化的一种,只 ...