要知道为什么需要自定义的转换器?它能做什么?
struts不能自动完成 字符串 到 引用类型的转换,上一篇文章已经解释过了
配置类型转换器
- 自定义类型转换器必须继承StrutsTypeConverter类或对这个接口的某一种实现做扩展。
public class DateConverter extends StrutsTypeConverter {
private DateFormat dateFormate;
public DateConverter() {
System.out.println("DateConverter Constractor");
dateFormate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
}
// 字符串转为目标类型
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
System.out.println("DateConverter convertFromString");
if (toClass == Date.class) {
if (values != null && values.length > 0) {
String value = values[0];
try {
return dateFormate.parseObject(value);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return values;
}
// 由目标类型转换为字符串
@Override
public String convertToString(Map context, Object o) {
System.out.println("DateConverter convertToString");
if (o instanceof Date) {
Date date = (Date) o;
return dateFormate.format(date);
}
return null;
}
}
- 编写配置文件
基于字段配置:在字段所在的model(可能是Action,可能好似javaBean)的包下,新建一个ModelclassName-conversion.properties
在文件中输入键值对:fieldName=类名转换器的全类名
date=com.lig.strutsTest2.converters.DateConverter
以上是基于字段的配置方式;下面介绍基于类型的配置
创建Model类,和model-conversion.properties文件;文件目录如下
自定义model类只有一个Date类型的date属性和toString方法,配置文件和上面的配置文件相同;然后在Action中实现ModelDriven接口
public class ConversionAction extends ActionSupport implements ModelDriven<Customor> {
private Customor model;
public String execute() {
System.out.println("model=" + model);
return "success";
}
@Override
public Customor getModel() {
model = new Customor();
return model;
}
}
执行结果如下: