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



好吧,所以我已经在互联网上搜索了几天了,但我仍然被难住了。我有一个JSP,它进行数据库调用,并在Datatables表中显示数据。现在,当日期传递到页面时,其格式为yyyy-MM-dd hh:MM:ss。我们的用户(美国)习惯于看到MM/dd/yyyy格式,所以我使用fmt:formatDateJSTL标记来显示它。不幸的是,无论出于什么原因,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服务器中。

还有一些字体标签也在使用中。移除它们后,一切都会正常工作。

相关内容

  • 没有找到相关文章