在做项目的过程中,遇到了这么一个问题,就是在分页的基础上,按照日期查询的时候,点击第一页之外的每一页,日期控件显示乱码问题,如图:
第一页:
第二页:
在初步做这个功能的时候,点击按照日期查询,或者其他条件查询第一页都没有问题,也就没有注意当点击第二页或者更多页的时候,按照条件查询的正确与否。当测试人员将此Bug指派给我的时候,我立马想到的就是Laydate控件的问题,但是从何下手?之前考虑的是自己写的控件代码格式没有起作用,但是如果没有起作用,为何第一页正常呢?先把自己的控件代码附上:
<label>下单时间:</label>
<input type="text" name="search_GTE_createDate" style="width:160px;"
class="laydate-icon"
οnclick="laydate({istime: true, format: 'YYYY-MM-DD'})"
value="${startDate}">-
<input type="text" name="search_LTE_createDate" style="width:160px;"
class="laydate-icon"
οnclick="laydate({istime: true, format: 'YYYY-MM-DD'})"
value="${endDate}">
所以JSP想不出解决办法,就得从传值Controller入手了:其实很简单就是因为当翻页的时候日期乱码,传值就是乱码的,显示到JSP当然也就是乱码的了。所以只要在Controller页面转换一下代码就好:
代码如下:
// 开始日期
//从页面获取值
String date = (String) searchParams.get("GTE_createDate");
//判断是否为空
if (date != null) {
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US);
Date d = null;
try {
//进行判断日期格式是否正确
d = sdf.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
//判断获取的是否是正常日期
if (d != null) {
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// String objStartCreate = sdf.format(d);
date = sdf.format(d);
if (date != null) {
searchParams.remove("GTE_createDate");
searchParams.put("GTE_createDate", DateUtil.strToDate(date.trim() + " 00:00:00"));
}
} else {
//如果是正常格式,则正常输出
searchParams.remove("GTE_createDate");
searchParams.put("GTE_createDate", DateUtil.strToDate(date.trim() + " 00:00:00"));
}
}
这样,再传回页面的时候则进行了转换,显示正常格式,截图如下:
所以遇到问题多方位思考,用心去解决,其实很简单。