我使用带有嵌套属性的 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);
这是一个错误还是故意的?
亲切的问候
多米尼克
答案 0 :(得分:2)
这是故意的。由于该功能当前已定义,因此 Comparator 用于内存中排序,而 sortProperty 在使用后端 DataProvider 时适用。
但是,您可以使用带有 setComparator
的 ValueProvider
变体来使代码更短:setComparator(dto -> dto.getOrder().getCreatedAt())
。此外,列通过 setComparator
标记为可排序,因此不需要单独执行 setSortable(true)
。