#vaadin #vaadin-flow #vaadin-grid
Вопрос:
У меня есть приложение vaadin 19. На странице просто отображается компонент сетки и текстовое поле фильтра вверху. В настоящее время я переношу это в отдельную службу, использующую архитектуру микросервиса. Чтобы получить все элементы на странице, это нормально, это хорошо работает. Когда я применяю фильтр к таблице, выполняйте поиск данных таким образом, чтобы они дважды попадали по URL-адресу.
Я вижу в журналах, что запрос был сделан дважды. Я понятия не имею, почему. Ниже приведен мой код:
filterText.addValueChangeListener(e -> filterByName(e.getValue()));
При этом вызывается следующий метод.
private void filterByName(String filterString) {
String likeFilter = "%" filterString "%";
grid.setItems(query -> userMicroserviceClient.findByNameAndEmailFilter(likeFilter,
PageRequest.of(query.getPage(), query.getPageSize(),
toSpringDataSort(query.getSortOrders())))
.stream());
}
Любые идеи, почему это вызовет api микросервиса дважды.
Спасибо
Комментарии:
1. Может быть, второй запрос касается расчета счета? Попробуйте добавить обратный вызов count.
Ответ №1:
Я думаю, это связано с тем, что сетка извлекает строки в двух пакетах. Сначала он делает немедленную оптимистичную выборку, чтобы сразу же что-то показать, даже если он не может знать, сколько показать. После того, как компонент фактически отображается в браузере на основе первоначально извлеченных данных, он может сделать еще один запрос, чтобы получить еще несколько строк, чтобы они уже были кэшированы для обеспечения плавной прокрутки.
Вы можете убедиться в этом, проверив, относятся ли два запроса к разным страницам, а не к одинаковым в обоих запросах.
Комментарии:
1. Похоже, что таблица получит следующий набор результатов, поэтому следующая страница результатов. Если вы также уже прокрутили результаты на 3 страницы, при фильтрации он попытается получить такое же количество результатов и сохранит положение прокрутки.