【问题标题】:Vaadin Flow grid setItems on Filter calls API twice过滤器上的 Vaadin Flow 网格 setItems 调用 API 两次
【发布时间】:2021-06-18 12:14:54
【问题描述】:

我有一个 vaadin 19 应用程序。该页面仅在顶部显示一个 Grid 组件和过滤器文本字段。我目前正在将其迁移到使用微服务架构的单独服务中。让所有项目分页很好,这很好。当我对表应用过滤器时,以两次命中 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 两次。

谢谢

【问题讨论】:

  • 也许第二个请求是为了计算count?尝试添加计数回调。

标签: vaadin vaadin-flow vaadin-grid


【解决方案1】:

我认为这是因为 Grid 分两批获取行。首先,即使它不知道要显示多少,它也会立即乐观地获取甚至要显示的内容。在组件根据最初获取的数据在浏览器中实际呈现后,它可能会再次请求获取更多的行以使其已经缓存以确保平滑滚动。

您可以通过检查这两个请求是否针对不同的页面而不是两个请求中的相同来验证这一点。

【讨论】:

  • 看来表格会得到下一组结果,所以是下一页结果。如果您还已经滚动了 3 页的结果,当您过滤时,它将尝试检索相同数量的结果并保持滚动位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-11
  • 1970-01-01
  • 2017-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多