Struts2 请求数据的自动封装 及 自定义转换器类
请求数据自动封装:
实现原理:使用了参数拦截器。struts-default.xml中
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
方式一:JSP页面表单数据填充到action中的属性
方式二:JSP页面表单数据填充到action的对象中的属性
方式一:JSP页面表单数据填充到action中的属性
注册页面:register.jsp:
<body>
<form action="${pageContext.request.contextPath }/user_register.action" method="post">
用户名:<input type="text" name="name"><br/>
密码:<input type="text" name="pwd"><br/>
年龄:<input type="text" name="age"><br/>
生日:<input type="text" name="birth"><br/>
<input type="submit" value="注册">
</form>
</body>
处理action:
/**
* Struts核心业务: 请求数据自动封装以及类型转换*/
public class UserAction {
//请求数据封装
private String name;//这里的字段名字必须与jsp中的名字一致
private String pwd;
private int age;
private Date birth;
//。。。对应的get,set方法// 处理注册请求
public String register() {
System.out.println(user.getName());
System.out.println(user.getPwd());
System.out.println(user.getAge());
System.out.println(user.getBirth());
return "success";
}
}
方式二:JSP页面表单数据填充到action的对象中的属性
一般使用对象来封装数据,而不是用字段。
/**
* Struts核心业务: 请求数据自动封装以及类型转换*/
public class UserAction {
// 对象类型,一定给get方法
private User user;
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
// 处理注册请求
public String register() {
System.out.println(user.getName());
System.out.println(user.getPwd());
System.out.println(user.getAge());
System.out.println(user.getBirth());
return "success";
}
}
对应的前端jsp页面:
<body>
<form action="${pageContext.request.contextPath }/user_register.action" method="post">
用户名:<input type="text" name="user.name"><br/>
密码:<input type="text" name="user.pwd"><br/>
年龄:<input type="text" name="user.age"><br/>
生日:<input type="text" name="user.birth"><br/>
<input type="submit" value="注册">
</form>
</body>
类型自动转换:
在Struts中jsp提交的数据,Struts会自动转换为action中对应属性的类型,对于基本数据类型以及日期类型会自动转换。
注意:前端jsp提交的日期类型在struts中只支持yyyy-MM-dd格式,如2016-11-21,如果在jsp页面中的生日格式用20161121 服务端会报错。
所以如果需要使用其他的日期类型格式,需要自定义类型转换器。
类型转换器分为:
局部类型转换器
全局类型转换器
Struts2的自定义类型转换器:
struts的转换器api:可以查看struts.chm文档
|--TypeConverter 转换器接口
|--DefaultTypeConverter 默认的类型转换器类
|--StrutsTypeConverter 用户编写的转换器类继承此类
Struts2中如何配置自定义转换器:
1.写一个类继承StrutsTypeConverter
2.重写convertFromString和convertToString方法
3.注册转换器
3.1在action所在包中建立Action名-conversion.properties
3.2 在3.1文件中添加以下数据
需要转换的字段名=自定义转换器类的权限定名
birthday=xx.convertor.DateTypeConvertor
转换器开发步骤:
1.写转换器类
2.配置转换器类,告诉struts应用你写的转换器类
--在同包的action目录下,新建一个properties文件
--命名规则:ActionClassName-conversion.properties
举例:
1. 自定义类型转换器类
/**
* 自定义类型转换器类*/
public class MyConverter extends StrutsTypeConverter {
// 新需求: 要求项目中要支持的格式,如: yyyy-MM-dd/yyyyMMdd/yyyy年MM月dd日..
// 先定义项目中支持的转换的格式
DateFormat[] df = { new SimpleDateFormat("yyyy-MM-dd"),
new SimpleDateFormat("yyyyMMdd"),
new SimpleDateFormat("yyyy年MM月dd日") };
/**
* 把String转换为指定的类型 【String To Date】
* @param context 当前上下文环境
* @param values jsp表单提交的字符串的值
* @param toClass 要转换为的目标类型
*/
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
// 判断: 内容不能为空
if (values == null || values.length == 0) {
return null;
}
// 判断类型必须为Date
if (Date.class != toClass) {
return null;
}
// 迭代:转换失败继续下一个格式的转换; 转换成功就直接返回
for (int i=0; i<df.length; i++) {
try {
return df[i].parse(values[0]);
} catch (ParseException e) {
continue;
}
}
return null;
}
@Override
public String convertToString(Map context, Object o) {
return null;
}
}
2. 在action的同包下,新建一个文件UserAction-conversion.properties
内容为:user.birth=转换器类的全路径,即MyConverter的完整路径名称
注意:以上的转换器注册时候是与action的名字相耦合的,因此只能在自己的action中内部使用,项目中其他的action是不能用该转换器的,称之为局部转换器注册方式。
那如何定义全局类型转换器呢???
需要写一个转换器,给所有的action用。与局部类型转换器开发过程一样,只是配置的不一样。
配置全局类型转换器:
1.在项目的src目录下新建一个固定文件:xwork-conversion.properties
2.在该文件中添加以下数据
需要转换的类类型=转换器类的权限定名
如:java.util.Date=xxx.converter.DateConverter(即,当遇到日期类型的时候,就用xxx.converter.DateConverter转换器)该转换器并没有与任何的action关联,是一个全局的类型转换器。
如果局部转换器已经有了,就不再用全局的了,采用就近原则。
Struts2 请求数据的自动封装 及 自定义转换器类的更多相关文章
- @ConfigurationProperties注解对数据的自动封装
@ConfigurationProperties注解对数据的自动封装 @ConfigurationProperties可以对基本数据类型实现自动封装,可以封装格式为yyyy/MM/dd的日期 测试代码 ...
- angular开发中对请求数据层的封装
代码地址如下:http://www.demodashi.com/demo/11481.html 一.本章节仅仅是对angular4项目开发中数据请求封装到model中 仅仅是在项目angular4项目 ...
- asp.net中Request请求参数的自动封装
这两天在测一个小Demo的时候发现一个很蛋疼的问题----请求参数的获取和封装,例: 方便测试用所以这里是一个很简单的表单. <!DOCTYPE html> <html xmlns= ...
- Struts2(接受表单参数)请求数据自动封装和数据类型转换
Struts2请求数据自动封装: (1)实现原理:参数拦截器 (2)方式1:jsp表单数据填充到action中的属性: 普通的成员变量,必须给set,get可以不给的. 注意点,A ...
- struts中的请求数据自动封装
Struts 2框架会将表单的参数以同名的方式设置给对应Action的属性中.该工作主要是由Parameters拦截器做的.而该拦截器中已经自动的实现了String到基本数据类型之间的转换工作.在st ...
- 20.struts2的数据填充和类型转换.md
目录 1. struts2的自动填充 2. struts2的对象填充 3. struts2的类型转换器 3.1 类继承关系 3.2 局部转换器 3.3 全局转换器 3.4 注意 1. struts2的 ...
- Struts2.0 封装请求数据和拦截器介绍
1. Struts2 框架中使用 Servlet 的 API 来操作数据 1.1 完全解耦合的方式 Struts2 框架中提供了一个 ActionContext 类,该类中提供了一些方法: stati ...
- struts2(二) 表单参数自动封装和参数类型自动转换
前篇文章对struts2的一个入门,重点是对struts2的架构图有一个大概的了解即可,之后的几篇文章,就是细化struts2,将struts2中的各种功能进行梳理,其实学完之后,对struts2的使 ...
- struts2(三)之表单参数自动封装与参数类型自动转换
前言 对struts2的使用不外乎这几点,参数自动封装,拦截器的使用,数据校验,ognl表达(值栈和actionContext的讲解),struts2的标签,struts2的国际化, struts2的 ...
随机推荐
- 12.hibernate命名查询
1.创建如下javaweb项目结构 2.在项目的src下创建hibernate.cfg.xml主配置文件 <?xml version="1.0" encoding=" ...
- 大数据除法(Large data division)
题目描述 Description 除法是计算中的基础运算,虽然规则简单,但是位数太多了,也难免会出错.现在的问题是:给定任意位数(足够大就可以啦O(∩_∩)O)的一个被除数,再给定一个long lon ...
- UPX3.03+UpolyX.5 Shell v1.0 汉化绿色版
软件名称:UPX3.03+UpolyX.5 Shell v1.0 汉化绿色版软件类别:汉化软件运行环境:Windows软件语言:简体中文授权方式:免费版软件大小:635 KB软件等级:整理时间:201 ...
- ***C - I love sneakers!(动态规划,分组背包)
C - I love sneakers! Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...
- 调用CImg库显示WAV格式音频波形
最近在做傅里叶变换和小波变换时经常要通过显示波形来检验算法,但通过visual studio之类显示波形又显得麻烦,而且不能跨平台. CImg是一个跨平台的C++的图像处理库,提供的图像处理等功能十分 ...
- Understanding Neural Networks Through Deep Visualization
当数据一层一层通过更多的卷积层时,你可以得到的特征图像代表的特征就会更加的复杂. 在网络的最后,你也许可以得到一个抽象的物体.如果你想通过可视化方法在卷积神经网络中看到更多的信息.这里有一个工具方便你 ...
- vs打开项目,创建虚拟目录,提示权限不足无法写入配置文件
如题,从源代码管理器上获取下来程序后,自己打开始,提示如题,尝试过以管理员启动vs,给目录权限提升,修改csproj项目配置文件(修改userIIS节点)and so on,无意间在用别的文档编辑器编 ...
- linux 内核协议栈收报流程(二)Netfilter全貌
ip层分片整理 int ip_local_deliver(struct sk_buff *skb){ /* * Reassemble IP fragments. */ if (ip_is_fragme ...
- HTML中加载flash方法
首先贴上代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...
- VBS基础篇 - 对象(5) - File对象
VBS基础篇 - 对象(5) - File对象 描述:提供对文件所有属性的访问,从FSO对象的GetFile方法获得. 使用File对象 要用File对象模型来编程必须先用FileS ...