Отключение возможности изменить порядок сортировки отсортированных данных OpenFaces - PullRequest
1 голос
/ 28 марта 2012

На странице 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, чтобы пользователь не мог изменить порядок сортировки таблицы?

Спасибо.

1 Ответ

1 голос
/ 02 апреля 2012

Для тех, кому это может быть интересно, я обнаружил, что ответ на мой вопрос состоял в том, чтобы переписать функцию OpenFaces JavaScript _reload () после создания DOM. Я понимаю, что это может помешать любому компоненту OpenFaces на той же странице совершать вызовы AJAX (хотя на рассматриваемой странице у меня есть только один источник данных, так что это не проблема).

<script type="text/javascript">
    $(document).ready(function() {
        // Prevent OpenFaces datatable component from sending AJAX requests!
        window.OpenFaces.Ajax._reload = function(one, two, three) {
            // Do nothing!
        };
    });
</script>

Это решение не предотвращает выполнение других вызовов AJAX на странице, поэтому все еще можно использовать a4j: commandButton.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...