在使用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;
}
}
}
项目开发案例:
/**
* 设置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;
}
}