fmt:formatDate JSTL标记和使用Datatables插件的自定义日期排序

时间:2013-08-26 16:35:11

标签: jquery datatables date-sorting

好的,所以我现在已经在互联网上搜索了几天,而且我仍然难过。我有一个进行数据库调用的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服务器中都会出现此问题。

1 个答案:

答案 0 :(得分:0)

还有正在使用的字体标签。删除后,一切正常。