struts2默认支持类型转换
- 字符串 <--> 指定类型 之间转换
字符串 转成 指定类型:表单提交,浏览器发送服务器
指定类型 转成 字符串:标签回显,服务器发送浏览器 - 指定类型
8个基本类型、以及包装类
时间 Date(字符串有格式要求:yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss)
数组、List、Map
public class MyDateConverter extends DefaultTypeConverter {
@Override
//参数1: 待转换的对象
//参数2: 需要被转换成的类型
public Object convertValue(Object value, Class toType) {
try {
//1 创建sdf 格式化
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
//2 判断参数2 的 类型
if(toType == Date.class){
// Date.class=> 字符串转日期
// 2012/12/12 => Date.class
String[] params = (String[]) value;
return sdf.parse(params[0]);
}
if(toType == String.class){
// String.class = > 日期转字符串
// Date => 2012/12/12
Date date = (Date) value;
return sdf.format(date);
}
} catch (ParseException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
throw new RuntimeException("不可能!!");
}
}
自定义类型转换器
1.自定义类型转换器的实现类
- 方案1:实现接口:TypeConverter,有一个方法,但参数过多。
- 方法2:继承默认实现类:DefaultTypeConverter 。提供简洁方法convertValue(Object , Class)
2.convertValue(Object value , Class toType)的使用
- 表单提交,浏览器发送到服务器。浏览器发送的肯定字符串String,需要转换成指定的类型。例如Date类型
参数1:value,表示浏览器发送的数据。类型是String[] ,底层使用request.getParameterValues("...")
参数2:toType,表示需要转换的类型,java.uilt.Date类型
操作:例 如果toType是 Date类型,表示希望将 字符串转成 时间if(toType == java.util.Date.class){ //获得数据 String[] params = (String[])value; //转成成时间 }
- 标签回显,服务器发送 浏览器,类型之前已经从字符串转成时间,现在希望将时间再转换成 字符串。
参数1:value,表示服务器已经转成好的时间。类型Date。
参数2:toType,表示需要转换的类型,String类型
操作:
if(toType == String.class){
// 将数据强转时间
Date date = (Date)value;
// 格式化
}
注册转换器
1.分类:
- 局部转换器:只对当前Action类有效。
限制: 只能对action类的属性进行转化,不能对javabean中属 - 全局转换器:对所有的Action类有效。
注:自定义转换器很少使用,一般情况使用默认就可以。
2.转换实现
public Object convertValue(Object value, Class toType) {
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
//1 浏览器发送服务器--表单提交
// * value : String[]
// * toType : Date
if (toType == java.util.Date.class) {
// 1.1 强转,获得数据
String[] paramValues = (String[]) value;
// 1.2 转成时间,返回 , 默认使用第一个
return dateFormat.parse(paramValues[0]);
}
//2 服务器发送浏览器--标签回显
// * value : 服务器已经转换好的数据 Date
// * toType : 需要类型 String
if(toType == String.class){
// 获得时间数据
java.util.Date date = (java.util.Date)value;
// 格式化
return dateFormat.format(date);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
//执行其他
return null;
}