好的,所以我一直在網上衝浪了幾天,而且我仍然難倒了。我有一個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服務器中都會發生此行爲。