好的,所以我现在已经在互联网上搜索了几天,而且我仍然难过。我有一个进行数据库调用的JSP,并在Datatables表中显示数据。现在,当日期传递给页面时,格式为yyyy-MM-dd hh:mm:ss。我们的用户(美国)习惯于看到MM / dd / yyyy格式,因此我使用fmt:formatDate JSTL标签来显示它。不幸的是,无论出于何种原因,JS都不喜欢那个标签,我不知道为什么。
这是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服务器中都会出现此问题。
答案 0 :(得分:0)
还有正在使用的字体标签。删除后,一切正常。