嵌套属性的 vaadin 网格列排序

时间:2021-06-18 14:45:43

标签: vaadin vaadin-grid vaadin14

我使用带有嵌套属性的 Vaadin 网格,例如order.createdAt。我想对这些列进行排序并使用 .setSortProperty("order.createdAt") 设置排序,因为 createdAt 是一个始终为 Comparable 的 LocalDateTime。但这不起作用。我需要为每个这样的列定义一个 comparator,而且我已经使用了很多 :-)

grid.addColumn(new LocalDateTimeRenderer<>(dto -> 
  dto.getOrder().getCreatedAt(), DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)))
 .setAutoWidth(true)
 .setFlexGrow(0)
 .setHeader("Order data")
 //.setSortProperty("order.createdAt") <-- doesn't work
 .setComparator((val1, val2) -> val1.getOrder().getCreatedAt().compareTo(val2.getOrder().getCreatedAt()))
            .setSortable(true);

这是一个错误还是故意的?

亲切的问候
多米尼克

1 个答案:

答案 0 :(得分:2)

这是故意的。由于该功能当前已定义,因此 Comparator 用于内存中排序,而 sortProperty 在使用后端 DataProvider 时适用。

但是,您可以使用带有 setComparatorValueProvider 变体来使代码更短:setComparator(dto -> dto.getOrder().getCreatedAt())。此外,列通过 setComparator 标记为可排序,因此不需要单独执行 setSortable(true)