如何解决vaadin 网格排序 bigDecimal 列
我已将 BigDecimal 属性的列添加到网格中,并希望对此类列的排序开箱即用:
grid.addColumn(new NumberRenderer<>(dto -> dto.getTotalPrice(),NumberFormat.getCurrencyInstance()))
.setAutoWidth(true)
.setFlexGrow(0)
.setHeader("Summe")
.setSortProperty("totalPrice")
.setSortable(true);
但这不起作用,我必须提供比较器
.setComparator((val1,val2) -> val1.getTotalPrice().compareto(val2.getTotalPrice()))
可能类似this one
添加: 如果我不使用 NumberRenderer 并以正常方式添加列,则 setSortedProperty 会按预期工作:
grid.addColumn(OrderListDto::getTotalPrice,"totalPrice")
.setSortProperty("totalPrice")
解决方法
如果您没有定义渲染器,那么您为该列定义的值提供程序也将用于比较内存中的值(如果为该列启用了排序)。当您使用渲染器时,该列无法直接访问您提供给渲染器的值提供程序,因此您需要手动定义它。
您传递给 setSortProperty
的值仅由后端数据提供程序使用,而不用于内存中数据。它可能仍然给人一种工作的印象,因为 setSortProperty
也会触发 setSortable(true)
,当基于值提供者没有使用渲染器时它会工作。您传递给 setSortProperty
的值对内存数据没有任何影响,因此您可以执行 setSortProperty("foo")
并且结果将相同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。