Хорошо, поэтому я прочесываю интернет в течение нескольких дней, и я все еще в тупике. У меня есть 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
]
})
});
Я знаю, что это работает, потому что я тестировал против фиктивных данных, где я просто жестко закодированные даты в формате ММ/дд/гггг в таблицу , Сорт работал, как ожидалось, когда я это делал (сортировка по годам, затем месяцам, а затем и день).
Теперь вот код для тела таблицы:
<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>
Это прекрасно работает для вывода данных в формате ММ/дд/гггг, но по какой-то причине, мой род просто не нравится , Когда я нажимаю кнопки сортировки, они меняют изображение (стрелка вверх стрелкой вниз и наоборот), чтобы отразить, что выполняется сортировка, но данные не сортируются на экране. Кроме того, если я удалю тэг fmt: formatDate и закомментирую js для сортировки даты, дата будет отображаться как yyyy-MM-dd hh: mm: ss и будет сортироваться таким образом без проблем (как и ожидалось).
Я немного озадачен, потому что я полагал, что fmt: formatDate будет происходить на стороне сервера, поскольку это JSTL. Это означало бы, что клиент будет видеть только данные в формате MM/dd/yyyy после форматирования, а когда js делает это на стороне клиента, это не должно быть иначе, чем когда я жестко закодировал даты. но это не происходит.
Любые идеи? Есть ли какая-то вопиющая проблема, которую мне не хватает?
EDIT (1): Я использую JDeveloper 11G R2. Такое поведение происходит как на интегрированном сервере WebLogic, так и на автономном сервере WebLogic.