这次在做一个SpringMVC项目,碰到一个与Date类型有关的问题,感觉蛮烦人的:
在domain类中,有一个属性是Date类型,对其有相关联的增删改查功能 。
1、查询,发现查询格式有问题,不是和存储的'yyyy-mm-dd'格式显示的,刚开始想在存入数据库或者从数据库取出的时候做一些动作,后来发现并不现实,然后就想在domain类中,get方法那里对数据进行格式化,即返回一个格式成‘yyyy-mm-dd’的Date类型......这个想法问题就大了,经过一番折腾,发现,不可能把一个‘yyyy-mm-dd hh-mm-ss’的Date变成‘yyyy-mm-dd’的Date,Date类型就是Date类型,哪来的格式呢?格式化的只可能是输出的结果格式化。
解决:在domain类中,添加一个getXXStr方法,在这个方法里面对Date进行格式化,返回一个格式好了的String字符串。在前端调用查询时,直接value="XXStr"就可以。
public String getObtainDateStr(){
if(this.obtainDate != null){
return DateUtils.FORMAT5.format(this.obtainDate);
}
return "";
}
引用时:
<td class="am-hide-sm-only">${t.obtainDateStr}</td>
2、新增,在新增一条数据时,Date类型无法自动匹配。因为使用MyBatis中,mapper里直接返回了一个类的对象,而对于像Date、Double之类的,无法自动绑定。
解决:在controller层里,使用@InitBinder注解,手动绑定数据。
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
SpringMVC在绑定数据之前,会先注册使用@InitBinder声明的编辑器。