在java web表单中提交的数据难免会有日期类型,struts2支持的日期类型是yyyy-MM-dd,如果是其他格式,就需要自己进行转换。比如yy-MM-dd
要完成自己定义的转换需要完成。
主要的类是:StrutsTypeConverter,该类是抽象类,需要实现两个方法
1)public Object convertFromString(Map context, String[] values, Class toClass)
2)public String convertToString(Map context, Object o)
其中第二个转换成字符串的不常用。
步骤:
1 定义转换器类
2 进行配置,局部或全局
1、定义转换器类
定义一个 DateConverter 类继承自 StrutsTypeConverter,实现两个虚方法
@Override public Object convertFromString(Map context, String[] values, Class toClass) { SimpleDateFormat[] sdfs = { new SimpleDateFormat("yyyyMMdd"), new SimpleDateFormat("yyyy/MM/dd"), new SimpleDateFormat("yyyy,MM,dd")}; //转换类型不是日期类型 if(toClass != Date.class){ return null; } //转换值是空或者长度为0 if(values == null || values.length==0){ return null; } String strDate = values[0]; Date birthday = null; for(int i=0;i<sdfs.length; i++){ try { birthday = sdfs[i].parse(strDate); return birthday; } catch (ParseException e) { continue; } } return birthday; } @Override public String convertToString(Map context, Object o) { // TODO Auto-generated method stub return null; }
2 配置,分两种。一种是局部配置,另一种是全局配置
2.1)应用于特定Action类的类型转换器 在特定Action类的同一目录下创建一个名为ActionClassName-conversion.properties的属性文件
例如:我的Action类是public class AdminAction extends ActionSupport,对该类转换的属性文件名是:AdminAction-conversion.properties
配置格式:属性.属性 = 转换器类全名
例如:
Admin类
public class Admin { private String aname; private String apasswd; private Date abirthday; public Admin() { // TODO Auto-generated constructor stub } public String getAname() { return aname; } 。。。。。
AdminAction类
public class AdminAction extends ActionSupport { private Admin admin; public Admin getAdmin() { return admin; } public void setAdmin(Admin admin) { this.admin = admin; } public String login(){ 。。。
表单页面
配置内容:admin.abirthday=com.baidu.converter.DateConverter
2.2) 全局配置:在src目录下创建xwork-conversion.properties
配置格式:类型全名=转换器类全名
上面例子就是:java.util.Date=com.baidu.converter.DateConverter