Параметры сетки потока Vaadin для фильтрации дважды вызывают API

#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 страницы, при фильтрации он попытается получить такое же количество результатов и сохранит положение прокрутки.