struts2自定义日期类型转换器

时间:2023-04-07 13:24:38

在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==){
return null;
}
String strDate = values[];
Date birthday = null;
for(int i=;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(){
。。。

表单页面

struts2自定义日期类型转换器

配置内容:admin.abirthday=com.baidu.converter.DateConverter

2.2) 全局配置:在src目录下创建xwork-conversion.properties

配置格式:类型全名=转换器类全名

上面例子就是:java.util.Date=com.baidu.converter.DateConverter