1.为什么需要转换器:
在页面表单数据都是以字符串的形式传入到后台的,Struts2 内置的一些基本的类型转换器,而大多时候,根据需求,需要自己定义一些类型转换器来处理数据。
2.编写转换器类并继承 StrutsTypeConverter:
以日期转换器为例:将前台日期字符串转化为 Date() 类型的对象:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
//自定义转换器
public class DateConverters extends StrutsTypeConverter{
private DateFormat dateFormat;
{
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
}
@Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
if(arg2 == Date.class) {
try {
return dateFormat.parse(arg1[0]);
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
@Override
public String convertToString(Map arg0, Object arg1) {
if(arg1 instanceof Date) {
return dateFormat.format((Date)arg1);
}
return null;
}
}
页面向后台传数据执行convertFromString()
后台向前台传数据执行convertToString()
3.加载自定义的转换器:
在局部范围内注册一个类型转换器:
局部注册一个类型转换器实际上只能对某个Action的属性生效。首先我们需要创建一个局部类型转换文件,该文件的命名规则如下:
ActionName-conversion.properties
//ActionName:使用该转换器的 action 名字
文件内容:需要转换的类 = 转换器的全类名
java.util.Date=cn.edu.pzhu.converters.DateConverters
在全局范围内注册一个类型转换器:
注册全局类型转换器需要提供一个类型转换文件,文件名为:
xwork-conversion.properties
全局的类型转换器应用的任意一个Action中,只要存在指定的属性,都会调用该转换器实现转换。