struts中的请求数据自动封装
Struts 2框架会将表单的参数以同名的方式设置给对应Action的属性中。该工作主要是由Parameters拦截器做的。而该拦截器中已经自动的实现了String到基本数据类型之间的转换工作。在struts中,默认使用拦截器
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
进行请求数据自动封装,它会JSP中提交的数据(基本数据类型、String、和日期)进行自动转换。
有时候, 需要将表单字段映射到多个对象的不同属性上,form 标签可以被映射到Action中一个属性的属性。Struts 2首先通过反射技术调用address的默认构造器创建address对象,然后再通过反射技术调用address中与请求参数同名的属性的setter方法来获取请求参数值。
1.两种请求数据
如果Action中属性只是基本数据类型,需要给出set()方法,get()方法可以不给。表单的数据名需要和Action类中的属性名一致,struts会完成相应的自动转换,Date对象的默认格式为yyyy-MM-dd。
如果Action中属性为对象类型,必须要给出get()和set()方法,表单的数据名为对象.属性的方式。
<form action="${pageContext.request.contextPath}/user_register.action" method="post">
用户名:<input type="text" name="user.userName"><br>
密 码:<input type="password" name="user.password"><br>
年 龄:<input type="text" name="user.age"><br>
生 日:<input type="text" name="user.birth"><br>
<input type="submit" value="提交"><br>
</form>
2.struts中自定义转换器
如果现有的转换器不能满足需要,可以自定义转换器。struts中的转换器有两种类型:局部类型转换器、全局类型转换器。自定义转换器的过程为:
- 继承StrutsTypeConverter,重写Convert中的抽象方法;
public class MyConverter extends StrutsTypeConverter{
//需要支持的格式为:yyyy-mm-dd、yyyymmdd、yyyy年mm月dd日
//预定义三种格式
SimpleDateFormat[] formats = {
new SimpleDateFormat("yyyy-mm-dd"),
new SimpleDateFormat("yyyymmdd"),
new SimpleDateFormat("yyyy年mm月dd日")
};
/**
*把string转换为指定的类型
* @param map 当前上下文环境
* @param strings jsp宝典提交的字符串的值
* @param aClass 要转换为的目标类型
*/
@Override
public Object convertFromString(Map map, String[] strings, Class aClass) {
System.out.println("into conversion");
//内容不能为空
if(strings == null || strings.length == 0)
return null;
//类型必须为Date
if(Date.class != aClass)
return null;
for(int i =0;i<formats.length;i++){
try {
return formats[i].parse(strings[0]);
} catch (ParseException e) {
// throw new RuntimeException("第i次转换失败",e);
continue;
}
}
return null;
}
@Override
public String convertToString(Map map, Object o) {
return null;
}
}
- 通知struts使用该转换器;
如果作为局部类型转换器,在与需要转换的Action类目录中新建ActionClassName-conversion.properties文件,文件中写:需要转换的字段名=自定义转换器类的全限定名,例如:
birthday=cn.itcast.convertor.DateTypeConvertor
如果作为全局类型转换器,需要在项目src目录下新建xwork-conversion.properties文件,在文件中写:
需要转换的类类型=转换器的全限定名,例如:
java.util.Date= cn.itcast.converter.DateConverter
struts中的请求数据自动封装的更多相关文章
- Struts2(接受表单参数)请求数据自动封装和数据类型转换
Struts2请求数据自动封装: (1)实现原理:参数拦截器 (2)方式1:jsp表单数据填充到action中的属性: 普通的成员变量,必须给set,get可以不给的. 注意点,A ...
- Struts2第四篇【请求数据自动封装、Action得到域对象】
前言 前三篇的Struts博文基本把Struts的配置信息讲解完了-..本博文主要讲解Struts对数据的处理 一般地,我们使用Servlet的时候都是分为几个步骤的: 得到web层的数据.封装数据 ...
- struts中请求数据自动封装
实现原理 参数拦截器 第一:jsp表单数据填充到action中的属性 必须实现set方法,get方法可以不需要实现,jsp页面name名字保持一致 第二:jsp表单填充到action的对象的属性 js ...
- angular开发中对请求数据层的封装
代码地址如下:http://www.demodashi.com/demo/11481.html 一.本章节仅仅是对angular4项目开发中数据请求封装到model中 仅仅是在项目angular4项目 ...
- 接口测试中读取excel中的请求数据含有中文问题,UnicodeEncodeError: 'latin-1' codec can't encode character '\u5c0f' in position
错误信息:UnicodeEncodeError: 'latin-1' codec can't encode character '\u5c0f' in position 31: Body ('小') ...
- WebClient HttpWebRequest从网页中获取请求数据
WebClient HttpWebRequest //HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(urlAddress) ...
- react-native中的请求数据
很多移动应用都需要从远程地址中获取数据或资源.你可能需要给某个 REST API 发起 POST 请求以提交用户数据,又或者可能仅仅需要从某个服务器上获取一些静态内容. 使用 Fetch React ...
- 12 Flutter仿京东商城项目 商品列表页面请求数据、封装Loading Widget、上拉分页加载更多
ProductList.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.dart'; imp ...
- Python接口测试-以&连接拼接字典数据(get中url请求数据)
get请求的utl数据是这样的,例如:/banner/findBanner?bannerType=1&_=1556107073181 ''' 1-banner图-banner/findBann ...
随机推荐
- 下载Android 5.0源码(附源码)
下载方法见我的另一篇博客:http://blog.csdn.net/maosidiaoxian/article/details/41680769 2014-12-24更新:5.0.1源码已上传. 这次 ...
- openfire教程网
http://myopenfire.com/article/articledir/1#
- 常用的 文件 MIME类型
估计很多朋友对不同后缀的文件对应的MIME类型不熟悉(实际上这么多我也记不住), 所以将平常常见的一些文件后缀对应的MIME类型写了一个对照表,现在奉献给大家: .asx,video/x-ms-asf ...
- spring-mvc 与 openid4java
以GoogleOpenID 为例,试验了OAuth单点登录的用法: <dependency> <groupId>org.openid4java</groupId> ...
- 转!!sql server 数据库 索引的原理与应用
索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法. 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使用目录 ...
- Redis常用的基本命令整理
SET key value [EX seconds] [PX milliseconds] [NX|XX] 设置缓存 K-V,如果 key 已经存在,则重写 EX seconds -- 设置过期时间, ...
- PhoneGap插件开发流程
前几天写了一个PhoneGap插件,这个插件的功能很简单,就是开启viewport设置.不过与其它插件相比,有好几个有意思的地方,仔细读了PhoneGap的源码才搞定.这里记录一下PhoneGap插件 ...
- sina 行情api
http://blog.csdn.net/simon803/article/details/7784682
- Qt之QRoundProgressBar(圆形进度条)
简述 QRoundProgressBar类能够实现一个圆形进度条,继承自QWidget,并且有和QProgressBar类似的API接口. 简述 详细说明 风格 颜色 字体 共有函数 共有槽函数 详细 ...
- jdbc 配置properties实现
package com.web.study; import java.io.InputStream; import java.sql.Connection; import java.sql.Drive ...