fmt:formatDate JSTL标签和使用Datatables插件的自定义日期排序
好的,所以我一直在网上冲浪了几天,而且我仍然难倒了。我有一个JSP进行数据库调用,并将数据显示在Datatables表中。现在,当日期传递到页面时,它的格式为yyyy-MM-dd hh:mm:ss。我们的用户(美国)习惯于看到MM/dd/yyyy格式,所以我使用fmt:formatDate JSTL标签来显示它。不幸的是,无论出于何种原因,JS不喜欢那个标签,我不知道为什么。fmt:formatDate JSTL标签和使用Datatables插件的自定义日期排序
这里是JavaScript:
jQuery.extend(jQuery.fn.dataTableExt.oSort, {
"date-us-pre": function (a) {
var usDatea = a.split('/');
return (usDatea[2] + usDatea[1] + usDatea[0]) * 1;
},
"date-us-asc": function (a, b) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"date-us-desc": function (a, b) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
});
我有一个文件名为jquery.datesort.js其中包括我在页面上。下面是我使用的初始化:
$(document).ready(function() {
$('#institution').dataTable({
"sScrollY": "200px",
"iDisplayLength": 25,
"sPaginationType": "full_numbers",
"bScrollCollapse": true,
"aoColumns": [
null,
null,
null,
null,
null,
{ "sType": "date-us" },
null,
null
]
})
});
我知道这工作,因为我测试了针对虚拟数据,在这里我简单的硬编码在MM/DD/YYYY格式的日期到表。当我这样做时,排序按预期工作(按年份,然后按月排序,然后按日排序)。
现在,这里是表体代码:
<tbody>
<c:forEach items="${STAT.rows}" var="item">
<c:set value="${item.LOC_ID}" var="locationID"/>
<tr>
<td><c:out value="${item.NAME}" /></td>
<td><c:out value="${item.SUBSCRIPT}" /></td>
<td><c:out value="${item.ADDRESS}" /></td>
<td><c:out value="${item.RESULT}" /></td>
<td><c:out value="${item.STATUS}" /></td>
<td><fmt:formatDate pattern="MM/dd/yyyy" value="${item.DATE}" /></td>
<td><c:out value="${item.TYPE}" /></td>
<td><c:out value="${item.RA}" /></td>
</tr>
</c:forEach>
</tbody>
也能正常工作,输出数据为MM/DD/YYYY的格式,但由于某些原因,我的那种根本不喜欢它。当我点击排序按钮时,它们会改变图像(向上箭头向下箭头,反之亦然),以反映正在执行排序,但数据不在屏幕上排序。此外,如果我删除fmt:formatDate标记并将日期排序的js注释掉,则日期将显示为yyyy-MM-dd hh:mm:ss,并按照该方式排序(如预期的那样)。
我有点困惑,因为我相信fmt:formatDate会发生在服务器端,因为它是JSTL。这意味着客户端只能看到MM/dd/yyyy的后期格式化数据,当js在客户端执行它时,它不应该与我对日期进行硬编码时不同。但这并没有发生。
任何想法?是否有某种明显的问题,我错过了?
编辑(1):我正在使用JDeveloper 11G R2。在集成WebLogic服务器和独立WebLogic服务器中都会发生此行为。
还有字体标签也被使用。删除它们之后,一切都按原样运行。