概念
当浏览器进行表单提交的时候,日期选择2017-08-09然后struts会把字符串转换成Date类型。这就是struts的类型转换。我们也可以自定义一个类型转换 (日期格式必须是这样才会转换)
原理
struts类型转换器格式
其中一个类的源码
自定义的实现
根据源码显示, 子类继承DefaultTypeConverter 也可以用StrutsTypeConverter来自定义类型转换
第一步 继承上文提到的两个类中的一个
第二步 实现类中的两个抽象方法 convertFromString convertToString
第三步 配置局部类型转换器
图示的含义为当用户输入生日属性的时候使用我们自己定义的名为MyDateConvert的类型转换器
实现类的函数参数详解
string[] values中存放的是表单中提交的所有对应的属性值为birthday的值 比如只有一个值就只存一个,有多个就存入数组,Class toClass传入的是目标类就是要转换成的类。
源码展示
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class MyDateConverter extends StrutsTypeConverter{
/**
* 把字符串转成对象类型
*/
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
// TODO Auto-generated method stub
/*System.out.println(toClass);
for(String s: values){
System.out.println(s);
}*/
if(values != null && values.length > 0){
//取数据
String dateStr = values[0];
if("".equals(dateStr)){//空的字符串
return null;
}
//转换
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
try {
return sdf.parse(dateStr);
} catch (ParseException e) {
//e.printStackTrace();
throw new RuntimeException(e);//转换异常
}
}
return null;
}
/**
* 把对象类型转成字符串类型
*/
@Override
public String convertToString(Map context, Object o) {
// TODO Auto-generated method stub
return null;
}
}
全局类型转换器
上文提到的转换只是针对对应的模型User的属性名为birthday的时候才会进行类型转换,假如还有一个模型 Order也有一个Date类型的变量需要进行类型转换,那么又要进行重复的操作 在struts中我们可以配置一个全局类型转换器
第一步 在源目录下创建一个
第二步 写入内容
这样只要传入的数据中有date类型的数据那么会自动进行类型转换