1.Struts2中为什么要类型转换?
HTML表单采集数据 →提交表单 →Action
底层依赖HTTP传递数据,而HTTP协议中 没有 “类型” 的概念. 每一项 表单输入只可能是一个字符串或一个字符串数组。因此在服务器端Action 中 必须把 String 转换为业务需要的特定的数据类型
2.Struts2中如何传递请求参数给Action?
Struts2框架会将表单的参数以同名的方式设置给对应Action的属性中。 该工作主要是由Parameters拦截器做的。而该拦截器中已经自动的实现了 String到基本数据类型之间的转换工作。类似于: Beanutils工具。
注意:
- String到基本数据类型的转换是自动的。
- String到Date日期类型的转换是有条件的。
默认输入框输入的格式必须是yyyy-MM-dd,其他格式无法转换。
- 如果类型自动转换错误,那么Struts2框架默认会找名为input的result进行处理。因此开发者需要在此Action的result配置中配置一个名为input的result。前提: 继ActionSupport
- 如果封装请求参数的时候出现乱码问题,那么请查看表单的提交方式是否是post。Struts2默认的编码方式是utf-8。
3.Struts2自定义类型转换器
1、自定义转换器继承StrutsTypeConverter
2、重写convertFromString和convertToString方法
3、注册转换器
3.1 在Action所在包中建立Action名-conversion.properties
3.2 在3.1文件中添加以下数据需要转换的字段名=自定义转换器类的权限定名
user.brithday=com.dazhi.converter.DateTypeConverter
注意:
- 以上的转换器注册时候是与Action的名字相耦合的,因此只能在自己的Action中内部使用,称之为局部转换器注册方式。
import org.apache.struts2.util.StrutsTypeConverter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
public class DateTypeConverter extends StrutsTypeConverter {
@Override
public Object convertFromString(Map map, String[] strings, Class aClass) {
System.out.println("values is"+ strings[0]+" class"+aClass);
if(strings[0]==null){
return null;
}
Date date = null;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
date = simpleDateFormat.parse(strings[0]);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
4.Struts2中如何自定义全局类型转换器?
实现的接口和继承的类都是相同的,本质上就是配置的方式不同。
1、自定义转换器继承StrutsTypeConverter
2、重写convertFromString和convertToString方法
3、注册转换器
3.1 在项目src目录下建立以下固定文件
xwork-conversion.properties
3.2 在3.1文件中添加以下数据
需要转换的类类型=转换器类的权限定名
如: java.util.Date= cn.itcast.converter.DateConverter
总结
该拦截器负责对错误信息进行拦截器<interceptor name="conversionError“
class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>