1.1.1 Struts2中自定义类型转换器:(了解)
类型转换的过程是双向的过程:
JSP---->Action参数提交:String---Date.
Action---->JSP数据回显:Date---String.
自定义类型转换器:
* 1.实现TypeConverter
* convertValue(java.util.Map<java.lang.String,java.lang.Object> context, java.lang.Object target, java.lang.reflect.Member member, java.lang.String propertyName, java.lang.Object value, java.lang.Class toType)
* 2.继承DefaultTypeConverter
* convertValue(java.util.Map<java.lang.String,java.lang.Object> context, java.lang.Object value, java.lang.Class toType)
* 3.继承StrutsTypeConverter
* convertToString(java.util.Map context, java.lang.Object o) ---数据回显的类型转换
* convertFromString(java.util.Map context, java.lang.String[] values, java.lang.Class toClass)---提交参数类型转换
将Struts2中Date的类型的格式更改为yyyy/MM/dd
1.自定义一个类型转换器:
public class MyDateConverter extends DefaultTypeConverter{
@Override
// 重写的类型转换的方法
/**
* 三个参数:
* * context:Map集合.
* * value:转换前的类型.
* * toType:转换后的类型.
*/
public Object convertValue(Map context, Object value, Class toType) {
// 类型转换是一个双向的过程:
// 封装数据的时候需要类型转换
// 数据回显到JSP的时候需要类型转换.
// 根据转换后的类型去判断:
DateFormat format = new SimpleDateFormat("yyyy/MM/dd");
if(toType == Date.class){
// 数据封装的类型转换 JSP---》Action String->Date
String[] arrs = (String[]) value;
Date date = null;
try {
date = format.parse(arrs[0]);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}else{
// 数据回显的类型转换 Action---》JSP Date->String
Date date = (Date) value;
String s = format.format(date);
return s;
}
}
}
2.注册类型转换器:
* 全局注册:针对所有的Action中的日期类型.
* 在src下创建一个xwork-conversion.properties
* java.util.Date=自定义类转换器的全路径.
* 局部注册:针对一个Action的属性.
* 1.在Action所在包下创建一个与Action类名相同-conversion.properties
* CustomerAction-conversion.properties 文件中 birthday=自定义类转换器的全路径.
***** 针对在Action中提供set方法的形式.
public class CustomerAction{
private Date birthday;
public void setBirthday(Date birthday){
This.birthday =birthday;
}
}
* 2.使用ModelDriven的方式接收:
* 在实体类所在包创建与类同名-conversion.properties
* Customer-conversion.properties
* birthday=自定义类转换器的全路径.