Переопределение метода сортировки листов Java Tobago не показывает данные - PullRequest
0 голосов
/ 22 января 2010

Я создал веб-приложение на Java, содержащее таблицу Tobago. Я сейчас пытаюсь переопределить механизм сортировки листа с помощью атрибута sortActionListener.

Когда я нажимаю на столбец, запускается мой метод сортировки. Я могу прочитать имя столбца и выполнить некоторые операции с SQL, чтобы получить данные, которые я хотел бы отобразить сейчас. Сортировка производится по запросу SQL. Проблема в том, что на листе не отображаются данные, он пуст.

Это сообщение об ошибке, которое я получаю:

org.apache.myfaces.custom.ajax.api.AjaxPhaseListener - Найденный компонент не является ajaxComponent

Кто-нибудь знает, как это решить? Должен ли мой лист быть похож на ajax или что-то не так?

Заранее спасибо!

UPDATE:

Я обнаружил, что сообщение об ошибке связано с конфликтом между библиотекой томагавк-песочницы и тобаго. После удаления lib из песочницы сообщение об ошибке исчезает. Тем не менее, у меня все еще есть проблемы с видом.

В случае, если я вручную перехожу на обработчик событий, все работает нормально, так как страница jsp будет перезагружена после обработчика событий. Это потрясающе. НО, если я запускаю код самостоятельно, не выполняя ручной переход, страница jsp НЕ перезагружается, и поэтому я не могу видеть данные.

Почему это так и как я могу убедить мой код обновить страницу jsp и, следовательно, лист? ;)

1 Ответ

0 голосов
/ 04 февраля 2010

Чтобы показать результаты, необходимо взаимодействовать с самим листом - что как-то имеет смысл;)

List<SheetData> sheetData = (List<SheetData>) sheet.getValue();

... performing SQL query ...

sheetData = sqlresult;

Вот и все;) Получите значение листа, выполните запрос SQL и отправьте результат объекту sheetData. После обновления лист будет обновлен.

Но я решил избавиться от SQL-запроса, поскольку он занимает много времени (очень большая и сложная база данных, не спрашивайте ...). Сейчас я иду по верному пути, создавая компаратор.

Comparator<SheetData> comparator = null;

comparator = new Comparator<SheetData> {

    public int compare(SheetData sd1, SheetData sd2) {

        int rc = 0;

        if (rc == 0) {
            rc = sd1.getString("Field").compareTo(sd2.getString("Field"));
        }

        if (rc == 0) {
            rc = sd1.getString("Field2").compareTo(sd2.getString("Field2"));
        }

        return rc;
    }
};

Collections.sort(sheetData, comparator);

Компаратор может сортировать столько полей, сколько я хочу, и быстро;) Вы также можете видеть состояние листа (по возрастанию / по убыванию) в столбце сортировки, которое не будет отображаться при моем первом подходе (запрос SQL).

...