Important Notice - Forums is archived
To simplify things and help our users to be more productive, we have archived the current forum and focus our efforts on helping developers on Stack Overflow. You can post new questions on Stack Overflow or join our Discord channel.

Vaadin lets you build secure, UX-first PWAs entirely in Java.
Free ebook & tutorial.
Динамическая подгрузка данных в Table
Здравствуйте!
Пытаюсь реализовать табличку, элементы которой должны динамически подгружаться в табличку. В качестве DataSource использую SQLContainer, проинициализированный TableQuery. Данных может быть достаточно много и они могут добавляться в любое время.
Как реализовано:
Table messagesList = new Table();
...............................
messagesList.setCacheRate(0.1d);
messagesList.setContainerDataSource(messagesContainer);messagesList.setSelectable(true);
messagesList.setImmediate(true);
messagesList.setSizeFull();
new InitializerThread().start();
...............................
В отдельном потоке, используя Vaadin Push периодически обновляю табличку:
class InitializerThread extends Thread {
@Override
public void run() {
while (!Thread.interrupted()) {
try {
Thread.sleep(refreshMessagesPeriod);
} catch (InterruptedException e) {
}
access(new Runnable() {
@Override
public void run() {
if (messagesList != null && !messagesList.getItemIds().isEmpty()) {
messagesList.refreshRowCache();
messagesList.focus();
}
}
});
}
}
Что смущает в этом способе:
1. Тяжесть обработки при большом количестве данных.
2. Проблема со скроллом (при обновлении скролл прыгает на первый элемент странички).
3. Каждая перерисовка сопровождается неприятными эффектами вроде "дрожания" строк, сброс выделенного текста строки.
Очень нужен совет, как правильно реализовать легковесную и красивую подгрузку новых данных.
Использую Vaadin 7.1.15 (допускаю переход к более новой версии).
повторил вопрос в англоязычной ветке форума: https://vaadin.com/forum#!/thread/7506773
Нашел решение лучше - контролировать добавление данных вручную, периодически запрашивая новые данные. Push позволяет сразу отображать добавленные строки. Для предотвращения "подпрыгивания" скролла (вызова метода refreshRowCache), вызываю приватный метод Table.setCurrentPageFirstItemId(int, boolean), передавая индекс добавленной строки.
Приветствую!
Похожее обсуждение было пару лет назад. Если интересно вот ссылка https://vaadin.com/forum/#!/thread/1008407/1046062