Здравствуйте!
Пытаюсь реализовать табличку, элементы которой должны динамически подгружаться в табличку. В качестве 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 периодически обновляю табличку:
[code]
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();
}
}
});
}
}
[/code]Что смущает в этом способе:
- Тяжесть обработки при большом количестве данных.
- Проблема со скроллом (при обновлении скролл прыгает на первый элемент странички).
- Каждая перерисовка сопровождается неприятными эффектами вроде “дрожания” строк, сброс выделенного текста строки.
Очень нужен совет, как правильно реализовать легковесную и красивую подгрузку новых данных.
Использую Vaadin 7.1.15 (допускаю переход к более новой версии).