struts2自定义日期类型转换器

在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

原文地址:https://www.cnblogs.com/zhaopengcheng/p/6701402.html