1. 程式人生 > >自定義org.apache.commons.beanutils的型別轉換器

自定義org.apache.commons.beanutils的型別轉換器

在使用org.apache.commons.Beanutils的populate方法時,需要將yyyy-MM-dd格式的字串轉換成java.util.Date,但是org.apache.commons.Beanutils的預設轉換器只能將字串轉換成java.sql.Date,詳見:org.apache.commons.beanutils.converters.DateTimeConverter的原始碼,我們可以自定義Convert物件:

import org.apache.commons.beanutils.Converter;    
   
public class DateConvert implements Converter{    
   
    public Object convert(Class arg0, Object arg1) {    
        String p = (String)arg1;    
        if(p== null || p.trim().length()==0){    
            return null;    
        }    
        try{    
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");    
            return df.parse(p.trim());    
        }    
        catch(Exception e){    
            return null;    
        }    
    }    
   
}    

自定義物件轉換類的使用: 
在使用之前先註冊   
ConvertUtils.register(new DateConvert(), java.util.Date.class);   

因為要註冊converter,所以不能再使用BeanUtils的靜態方法了,必須建立BeanUtilsBean例項 
    BeanUtilsBean beanUtils = new BeanUtilsBean(convertUtils,new PropertyUtilsBean()); 
   beanUtils.setProperty(bean, name, value); 

專案開發案例: 

/** 
* 設定Struts 中數字<->字串轉換,字串為空值時,數字預設為null,而不是0. 


* 也可以在web.xml中設定struts的引數達到相同效果,在這裡設定可以防止使用者漏設web.xml. 
*/

DateConverter: 

import java.text.SimpleDateFormat;

import org.apache.commons.beanutils.Converter;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 簡易DateConverter.
 * 供Apache BeanUtils 做轉換,預設時間格式為yyyy-MM-dd,可由建構函式改變.
 *
 * @author calvin
 */
public class DateConverter implements Converter {
	private static final Log log = LogFactory.getLog(DateConverter.class);
	private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

	public DateConverter(String formatPattern) {
		if (StringUtils.isNotBlank(formatPattern)) {
			format = new SimpleDateFormat(formatPattern);
		}
	}

	public Object convert(Class arg0, Object value) {
		try {
			String dateStr = (String) value;

			if (StringUtils.isNotBlank(dateStr)) {
				return format.parse(dateStr);
			}
		} catch (Exception e) {
			log.error(e.getMessage(), e);
		}
		return null;
	}

}