На странице JSF для просмотра данных у меня есть данные OpenFaces с включенной сортировкой и переупорядочением столбцов, сохраненные в соответствующих свойствах базового компонента (с помощью атрибутов: sortColumnId, sortAscending, columnsOrder в элементе o: dataTable). На соответствующей встроенной странице редактирования (где пользовательский код может сохранять отдельные строки таблицы по одному за раз), columnsOrder объекта данных связан с тем же свойством, поэтому столбцы отображаются в том же порядке, что и на просмотрите страницу, но элемент o: columnReordering отсутствует в datatable для предотвращения переупорядочения столбцов на странице редактирования. Это необходимо, поскольку вызов AJAX, инициируемый перемещением столбца, не удается из-за ошибки в частичном XML-ответе обновить таблицу. (Существуют и другие требования, которые означают, что таблица не должна обновляться через AJAX на странице редактирования.)
Я хочу иметь возможность сортировки данных на странице редактирования в том же порядке, что и на странице просмотра, но с отключенной сортировкой. Тем не менее, это не представляется возможным в OpenFaces. Я связал таблицу данных на странице редактирования с теми же свойствами базового компонента, но чтобы отсортированный столбец отображался как отсортированный, тег o: column должен иметь атрибут sortingExpression. Когда этот атрибут добавляется в столбец, этот столбец становится сортируемым, если пользователь может щелкнуть заголовок столбца. Если столбец не добавлен, пользователь не может сортировать столбец, но таблица также не сортируется по этому столбцу, даже если он указан в свойстве вспомогательного компонента как столбец для сортировки.
Используя JavaScript, запускаемый JQuery после создания DOM, я попытался перезаписать функцию, вызываемую событием click, в элементе 'th' заголовка столбца OpenFaces, но после вызова этой функции вызов AJAX для сортировки и обновить таблицу еще называется. Используемый код:
в Edit.xhtml:
<script type="text/javascript">
$(document).ready(function() {
$('#doorNumberColumnHeader').parents('th').onclick = null;
$('#doorNumberColumnHeader').parents('th').click(function(event) {
alert("Preventing AJAX call");
if (event) {
event.preventDefault ? event.preventDefault() : event.returnValue = false;
}
return false;
});
});
</script>
в данных OpenFaces из Edit.xthml:
<o:column id="doorNumberColumn" sortingExpression="#{submission.doorNum}" fixed="true" width="50px">
<f:facet name="header">
<h:outputText value="#{bundle.SubmissionDoorNumber}" id="doorNumberColumnHeader"/>
</f:facet>
<h:outputText value="#{submission.doorNum}"/>
</o:column>
Есть ли лучший способ предотвратить вызов AJAX, чтобы пользователь не мог изменить порядок сортировки таблицы?
Спасибо.