vaadin 网格列排序嵌套属性 [英] vaadin grid column sort for nested properties

查看:34
本文介绍了vaadin 网格列排序嵌套属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用带有嵌套属性的 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 createdAtis an LocalDateTime which is always Comparable. But this doesn't work. I need to define a comparatorfor 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.

但是,您可以使用带有 ValueProvidersetComparator 变体来使代码稍微短一些: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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆