Vaadin 14 网格排序非 Class 属性

Vaadin 14 Grid Sort on Non Class Atrtribute

我正在尝试使用后端数据源对 Vaadin 网格进行排序。

但是,我想对比较器方法的结果进行排序,而不是对后端数据源的 属性 进行排序。这是将列添加到 table:

的方式
grid.addColumn(p -> p.getNumberOfChoices()).setHeader("Choices").setComparator((c1, c2) -> c1.getNumberOfChoices().compareTo(c2.getNumberOfChoices())).setSortable(true);

看来我必须应用 setSortProperty() 方法让网格排序尝试排序,但由于我没有用于此排序的 class 属性,这结果异常。

如果所有项目都加载到内存中,则只能根据比较器进行排序。这确实违背了使用延迟加载数据提供程序的目的。这意味着您有两个选择:

  1. 将所有项目加载到例如 List 中并使用 Grid::setItems 设置它们,而不是使用延迟加载数据提供程序。
  2. 实施您的数据提供程序以明确支持您传递给 setSortProperty() 的任何字符串。提供程序实现可以通过 Query::getSortOrders 访问 属性 字符串。在这种情况下,您可能需要实现它以显式检查这种情况,以使其执行自定义 SQL 查询或以所需方式类似于延迟加载项目。