struts2能对java中八大基本类型以及String、Date等常用类型提供自动转换,Date类型转换时仅支持yy-MM-dd的格式转换。jsp页面提交数据时所有的数据均为字符串类型,这时我们需要把字符串转换为相应的数据类型。
局部类型转换器:对某个action转换类型起作用。
全局类型转换器:对所有action转换类型起作用。
首先编写Action,假定要转换的类型为date类型,struts2仅支持yy-MM-dd格式字符串的自动转换日期,这里我使用yy/MM/dd:
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
public class Test extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = -3585090517993263651L;
private Date date;
public String test(){
return "success";
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
然后编写自定义的类型转换器,自定义的类型转换器要继承struts2提供的DefaultTypeConverter
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
public class DateConvert extends DefaultTypeConverter {
@Override
public Object convertValue(Object value, Class toType) {
if(toType==Date.class){
Date date=new Date();
//struts默认传递的数据是数组,可能有多个
String[] str=(String[])value;
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");
try {
date=sdf.parse(str[0]);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}else {
return value.toString();
}
}
}
新建properties文件:
若定义全局类型转换器,则在src目录下新建xwork-conversion.properties文件
若定义局部类型转换器,则在对应的action包下新建action名称.properties文件
properties文件中定义要转换的数据名和其对应的转换器,如下图所示(待转换的数据名为date,所使用的转换器为DateConvert):