jqGrid表格显示mysql上的datetime类型,因为Java中读入datetime为long类型,所以通过json显示在网页上的为一串数字,而不是year-mouth-day:hour-minute-second,的类型。而且在网页端传回date类型,会报500 的错误,其实在这里就是传入参数错误的意思
而要解决这个问题,在jqGrid文档里面有一个自定义的数据格式,例如在colModel属性中:
{name:'birth',align:'center',formatter:currencyformatter,width:150,editable:true},就是这个formatter,它的值为一个js函数,这个函数会传入三个值,cellvalue为这一行的数据,一般我们就用到这一个就够了。所以我们只要在下面写上一个将long类型的数据装换为date类型的js函数就可以实现了,但是js里面没有直接将long类型转换为date类型的接口,所以我就参照j别人的经验写一个:
function currencyFmatter (cellvalue, options, rowObject)
{
Date.prototype.format=function(fmt) {
var o = {
"M+" : this.getMonth()+1, //月份
"d+" : this.getDate(), //日
"h+" : this.getHours()%12 == 0 ? 12 : this.getHours()%12, //小时
"H+" : this.getHours(), //小时
"m+" : this.getMinutes(), //分
"s+" : this.getSeconds(), //秒
"q+" : Math.floor((this.getMonth()+3)/3),//季度
"S" : this.getMilliseconds()//毫秒
};
var week = {
"0" : "\u65e5",
"1" : "\u4e00",
"2" : "\u4e8c",
"3" : "\u4e09",
"4" : "\u56db",
"5" : "\u4e94",
"6" : "\u516d"
};
if(/(y+)/.test(fmt)){
fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
}
if(/(E+)/.test(fmt)){
fmt=fmt.replace(RegExp.$1,((RegExp.$1.length>1) ? (RegExp.$1.length>2 ?"\u661f\u671f" :"\u5468") :"")+week[this.getDay()+""]);
}
for(var kin o){
if(new RegExp("("+ k +")").test(fmt)){
fmt = fmt.replace(RegExp.$1,(RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
}
}
return fmt;
}
//主要为这里
var date =new Date();
date.setTime(cellvalue);
var s=date.format('yyyy-MM-dd HH:mm:ss');
return s;
}
这样我们就可以自己在最下面返回前给他格式化一下并选择你需要的格式就OK啦,当然,返回的并不仅仅只可以是数据,也可以是html中的DOM,给他加小图标啊什么的,都是可以的。
至于返回后台时我们就将这个date类型改为String,然后在给他修改为date类型就可以成功的存入数据库了!