Struts2框架提供了很强大的数据封装的功能,不再需要使用Servlet的API完成手动封装了!!
第一种方式:属性驱动
  > 提供对应属性的set方法进行数据的封装。--经常使用
    * 表单的哪些属性需要封装数据,那么在对应的Action类中提供该属性的set方法即可。
    * 表单中的数据提交,最终找到Action类中的setXxx的方法,最后赋值给全局变量。     * 注意0:Struts2的框架采用的拦截器完成数据的封装。
    * 注意1:这种方式不是特别好:因为属性特别多,提供特别多的set方法,而且还需要手动将数据存入到对象中.
    * 注意2:这种情况下,Action类就相当于一个JavaBean,就没有体现出MVC的思想,Action类又封装数据,又接收请求处理,耦合性较高。
/**
* 属性驱动
* @author Administrator
*/
public class Regist1Action extends ActionSupport{ private static final long serialVersionUID = -966487869258031548L; private String username;
private String password;
private Integer age;
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setAge(Integer age) {
this.age = age;
} public String execute() throws Exception {
System.out.println(username+" "+password+" "+age);
return NONE;
} }
<h3>属性驱动的方式</h3>

<form action="${ pageContext.request.contextPath }/regist1.action" method="post">
姓名:<input type="text" name="username" /><br/>
密码:<input type="password" name="password" /><br/>
年龄:<input type="password" name="age" /><br/>
<input type="submit" value="注册" />
</form>
<!-- 属性驱动的方式 -->
<action name="regist1" class="com.itheima.demo2.Regist1Action"/>
  > 在页面上,使用OGNL表达式进行数据封装。
    * 在页面中使用OGNL表达式进行数据的封装,就可以直接把属性封装到某一个JavaBean的对象中。
    * 在页面中定义一个JavaBean,并且提供set方法:例如:private User user;
    * 页面中的编写发生了变化,需要使用OGNL的方式,表单中的写法:<input type="text" name="user.username">
    * 注意:只提供一个set方法还不够,必须还需要提供user属性的get和set方法!!!
      > 先调用get方法,判断一下是否有user对象的实例对象,如果没有,调用set方法把拦截器创建的对象注入进来,
/**
* 属性驱动方式,把数据封装到JavaBean的对象中
* @author Administrator
*/
public class Regist2Action extends ActionSupport{ private static final long serialVersionUID = 6556880331550390473L; // 注意二:属性驱动的方式,现在,要提供是get和set方法
private User user;
public User getUser() {
System.out.println("getUser...");
return user;
}
public void setUser(User user) {
System.out.println("setUser...");
this.user = user;
} public String execute() throws Exception {
System.out.println(user);
return NONE;
} }
<h3>属性驱动的方式(把数据封装到JavaBean的对象中)</h3>
<!-- 注意一:页面的编写规则,发生了变化,使用的OGNL表达式的写法 -->
<form action="${ pageContext.request.contextPath }/regist2.action" method="post">
姓名:<input type="text" name="user.username" /><br/>
密码:<input type="password" name="user.password" /><br/>
年龄:<input type="password" name="user.age" /><br/>
<input type="submit" value="注册" />
</form>
<!-- 属性驱动方式,把数据封装到JavaBean对象中 -->
<action name="regist2" class="com.itheima.demo2.Regist2Action"/>
第二种方式:模型驱动--经常使用
  > 使用模型驱动的方式,也可以把表单中的数据直接封装到一个JavaBean的对象中,并且表单的写法和之前的写法没有区别!
  > 编写的页面不需要任何变化,正常编写name属性的值
  > 模型驱动的编写步骤:
    * 手动实例化JavaBean,即:private User user = new User();
    * 必须实现ModelDriven<T>接口,实现getModel()的方法,在getModel()方法中返回user即可!!
/**
* 模型驱动的方式
* 实现ModelDriven接口
* 必须要手动实例化对象(需要自己new好)
* @author Administrator
*/
public class Regist3Action extends ActionSupport implements ModelDriven<User>{ private static final long serialVersionUID = 6556880331550390473L; // 必须要手动实例化
private User user = new User();
// 获取模型对象
public User getModel() {
return user;
} public String execute() throws Exception {
System.out.println(user);
return NONE;
} }
<h3>模型驱动方式</h3>
<form action="${ pageContext.request.contextPath }/regist3.action" method="post">
姓名:<input type="text" name="username" /><br/>
密码:<input type="password" name="password" /><br/>
年龄:<input type="password" name="age" /><br/>
<input type="submit" value="注册" />
</form>
<!-- 模型驱动的方式 -->
<action name="regist3" class="com.itheima.demo2.Regist3Action"/>

Struts2把数据封装到集合中

1. 封装复杂类型的参数(集合类型 Collection 、Map接口等)
2. 需求:页面中有可能想批量添加一些数据,那么现在就可以使用上述的技术了。把数据封装到集合中
3. 把数据封装到Collection中
  * 因为Collection接口都会有下标值,所有页面的写法会有一些区别,注意:
    > <input type="text" name="products[0].name" />
* 在Action中的写法,需要提供products的集合,并且提供get和set方法。
/**
* 属性驱动的方式,把数据封装到List集合中
* @author Administrator
*/
public class Regist4Action extends ActionSupport{ private static final long serialVersionUID = 6556880331550390473L; private List<User> list;
public List<User> getList() {
return list;
}
public void setList(List<User> list) {
this.list = list;
} public String execute() throws Exception {
for (User user : list) {
System.out.println(user);
}
return NONE;
} }
<h3>向List集合封装数据(默认情况下,采用是属性驱动的方式)</h3>
<!-- 后台:List<User> list -->
<form action="${ pageContext.request.contextPath }/regist4.action" method="post">
姓名:<input type="text" name="list[0].username" /><br/>
密码:<input type="password" name="list[0].password" /><br/>
年龄:<input type="password" name="list[0].age" /><br/> 姓名:<input type="text" name="list[1].username" /><br/>
密码:<input type="password" name="list[1].password" /><br/>
年龄:<input type="password" name="list[1].age" /><br/>
<input type="submit" value="注册" />
</form>
<!-- 把数据封装到List集合中 -->
<action name="regist4" class="com.itheima.demo2.Regist4Action"/>
4. 把数据封装到Map中
* Map集合是键值对的形式,页面的写法
> <input type="text" name="map['one'].name" />
* Action中提供map集合,并且提供get和set方法
/**
* 属性驱动的方式,把数据封装到map集合中
* @author Administrator
*/
public class Regist5Action extends ActionSupport{ private static final long serialVersionUID = 6556880331550390473L; private Map<String, User> map;
public Map<String, User> getMap() {
return map;
}
public void setMap(Map<String, User> map) {
this.map = map;
} public String execute() throws Exception {
System.out.println(map);
return NONE;
} }
<h3>向Map集合封装数据(默认情况下,采用是属性驱动的方式)</h3>
<form action="${ pageContext.request.contextPath }/regist5.action" method="post">
姓名:<input type="text" name="map['one'].username" /><br/>
密码:<input type="password" name="map['one'].password" /><br/>
年龄:<input type="password" name="map['one'].age" /><br/> 姓名:<input type="text" name="map['two'].username" /><br/>
密码:<input type="password" name="map['two'].password" /><br/>
年龄:<input type="password" name="map['two'].age" /><br/>
<input type="submit" value="注册" />
</form>
<!-- 把数据封装到map集合中 -->
<action name="regist5" class="com.itheima.demo2.Regist5Action"/>

7.Struts2框架封装数据的更多相关文章

  1. Struts2框架基础概念总结

    一.struts2框架 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的 ...

  2. Struts2 框架的值栈

    1. OGNL 表达式 1.1 概述 OGNL(Object Graphic Navigation Language),即对象图导航语言; 所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个 ...

  3. struts2框架值栈的概述之问题一:什么是值栈?

    1. 问题一:什么是值栈? * 值栈就相当于Struts2框架的数据的中转站,向值栈存入一些数据.从值栈中获取到数据. * ValueStack 是 struts2 提供一个接口,实现类 OgnlVa ...

  4. Struts2框架笔记02_API_结果页面配置_数据的封装

    目录 1. Struts2的Servlet的API的访问 1.1 方式一:完全解耦合的方式 1.1.1 环境搭建 1.1.2 代码 1.1.3 测试 1.1.4 向域对象中存入数据 1.2 方式二:使 ...

  5. Struts2框架的数据封装一之属性封装(属性封装的第一种方式:对参数进行封装)

    request带着参数来,aciton对其进行处理.在学习action之前,使用的是servlet对request进行处理.request请求时会带有参数,所以我们要对这些参数进行封装. 1. 为什么 ...

  6. Struts2.0 封装请求数据和拦截器介绍

    1. Struts2 框架中使用 Servlet 的 API 来操作数据 1.1 完全解耦合的方式 Struts2 框架中提供了一个 ActionContext 类,该类中提供了一些方法: stati ...

  7. 解析xml文件,遍历输出xml文件中的所有节点, 最终模仿实现struts2框架自动封装参数的功能

    程序结构:src文件夹下存放xml文件 该文件内容: <?xml version="1.0" encoding="UTF-8"?> <myst ...

  8. Struts2框架的数据封装一之属性封装(属性封装的第二种方式:封装成javaBean)

    Struts2中提供了两类数据封装的方式? 第一种方式:属性驱动(有两种方式:一个对属性,另外一个是将参数封装到javaBean中) B. 在页面上,使用OGNL表达式进行数据封装.(将参数封装到ja ...

  9. Struts2框架基础

    Struts2框架基础 1.Java的框架 1.1.框架简介 在大型项目开发过程中,经常会使用到一些框架,这样做好的好处是能够提高工作效率,在java中最常用的的框架就是SSH,这其实是三个框架的简称 ...

随机推荐

  1. java爬取猫咪上的图片

    首先是对知识点归纳 1.用到获取网页源代码,分析图片地址,发现图片的地址都是按编号排列的,所以想到用循环获取 2.保存图片要用到流操作和文件操作,对两部分知识进行了复习巩固 3.保存后的图片有一部分是 ...

  2. css 实现文本换行及显示不下隐藏显示省略号

    CSS文本超出2行就隐藏并且显示省略号 转载:https://www.cnblogs.com/wyaocn/p/5830364.html   今天做东西,遇到了这个问题,百度后总结得到了这个结果. 首 ...

  3. Oracle多表更新及MERGE命令和闪回机制还原数据表

    一.多表更新 比如线上有个系统由于某一个模块出现异常,导致系统整体的数据出现了错误,需要你手动改写数据库错误,Oracle update语句更新的值来自另一张表 update语法最基本的格式为 UPD ...

  4. python的代码块缓存机制,小数据池机制。

    同一代码块的缓存机制 在python中一个模块,一个函数,一个类,一个文件等都是一个代码块. 机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其 ...

  5. 使用PaxScript为Delphi应用增加对脚本的支持

    通过使用PaxScript可以为Delphi应用增加对脚本的支持. PaxScript支持paxC,paxBasic,paxPascle,paxJavaScript(对ECMA-262做了扩展) 四种 ...

  6. BZOJ 3230: 相似子串(后缀数组)

    传送门 解题思路 其实题目挺好想的.首先子串排名可以由后缀数组求得,因为不算重复的,所以后缀数组的每个后缀排名的去掉\(lcp\)的前缀排名为当前后缀的子串排名.这样就可以预处理出每个后缀的\(l,r ...

  7. 使用Objective-C的+(void)initialize初始化static变量

    在<Objective C类方法load和initialize的区别>一文中,我介绍了Objective-C对待+(void)initialize和+(void)load两个方法在编译和执 ...

  8. RN 0.6以后react-navigation 导航报错null is not an object (evaluating '_RNGestureHandlerModule.default.Direction')

    很久没用RN了之前用的时候还是很早的版本,现在有了很大的变化,感觉比之前成熟了很多重新看下.先整下导航 参考地址:https://reactnavigation.org/docs/en/getting ...

  9. angulajs 详解 directive 中 的 scope 概念

    Directive 是 angularjs 中最重要的概念,我的理解就是自定义html tag, 这个自定的tag 浏览器不会解析,会有angularjs 来动态解析. 比如在html 中添加 < ...

  10. MProtect使用小计【三】 – 权限管理

    说明 本篇简单的说一下怎么样使用的VMProtect的权限管理功能,使我们的程序拥有注册码的功能.只用的注册版的程序才能执行指定的函数. 同样这个功能VMProtect也有例子位置在:安装目录\VMP ...