vaadin 网格列排序嵌套属性 [英] vaadin grid column sort for nested properties
问题描述
我使用带有嵌套属性的 Vaadin 网格,例如order.createdAt
.我想对这些列进行排序并使用 .setSortProperty("order.createdAt")
设置排序,因为 createdAt
是一个 LocalDateTime,它始终是 Comparable
.但这不起作用.我需要为每个这样的列定义一个 comparator
,并且我已经使用了很多 :-)
I use Vaadin grid with nested properties, e.g. order.createdAt
. I want to sort such columns and set sorting with .setSortProperty("order.createdAt")
due to createdAt
is an LocalDateTime which is always Comparable
. But this doesn't work. I need to define a comparator
for every such column, and I've use a lot of them :-)
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);
这是一个错误还是故意的?
Is this a bug or it is intentionally ?
亲切的问候
多米尼克
Kind regards
Dominik
推荐答案
这是故意的.由于该功能当前定义为 Comparator 用于内存中排序,sortProperty 在使用后端 DataProvider 时适用.
It's intentional. As the feature is currently defined the Comparator is used for in-memory sorting, and sortProperty applies when using a backend DataProvider.
但是,您可以使用带有 ValueProvider
的 setComparator
变体来使代码稍微短一些:setComparator(dto -> dto.getOrder().getCreatedAt())
.此外,列通过setComparator
被标记为可排序,所以不需要单独做setSortable(true)
.
You can, however, use the setComparator
variant that takes a ValueProvider
to make the code slightly shorter: setComparator(dto -> dto.getOrder().getCreatedAt())
. Furthermore, column is marked as sortable through setComparator
so don't need to separately do setSortable(true)
.
这篇关于vaadin 网格列排序嵌套属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!