嵌套属性的 vaadin 网格列排序

vaadin grid column sort for nested properties

我使用具有嵌套属性的 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);

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

亲切的问候
多米尼克

这是故意的。由于该功能当前已定义,因此 Comparator is used for in-memory sorting, and sortProperty 在使用后端 DataProvider 时适用。

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