嵌套属性的 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 时适用。
但是,您可以使用带有 ValueProvider
的 setComparator
变体来使代码稍微短一些:setComparator(dto -> dto.getOrder().getCreatedAt())
。此外,列标记为可通过 setComparator
排序,因此不需要单独执行 setSortable(true)
.
我使用具有嵌套属性的 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 时适用。
但是,您可以使用带有 ValueProvider
的 setComparator
变体来使代码稍微短一些:setComparator(dto -> dto.getOrder().getCreatedAt())
。此外,列标记为可通过 setComparator
排序,因此不需要单独执行 setSortable(true)
.