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

问题描述:

好的,所以我一直在网上冲浪了几天,而且我仍然难倒了。我有一个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服务器中都会发生此行为。

还有字体标签也被使用。删除它们之后,一切都按原样运行。