-1

好的,所以我已经在互联网上搜索了几天,但我仍然很难过。我有一个 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 服务器中。

4

1 回答 1

0

还使用了字体标签。删除它们后,一切正常。

于 2013-08-26T19:41:16.793 回答