vaadin 网格排序 bigDecimal 列

vaadin grid sort bigDecimal column

我已将 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()))

可能类似

的问题

加法: 如果我不使用 NumberRenderer 并以正常方式添加列,则 setSortedProperty 将按预期工作:

grid.addColumn(OrderListDto::getTotalPrice, "totalPrice")
    .setSortProperty("totalPrice")

如果您没有定义渲染器,那么您为该列定义的值提供程序也将用于比较内存中的值(如果为该列启用了排序)。当您使用渲染器时,该列无法直接访问您提供给渲染器的值提供程序,因此您需要手动定义它。

您传递给 setSortProperty 的值仅供后端数据提供程序使用,而不用于内存中数据。它可能仍然给人以工作的印象,因为 setSortProperty 也会触发 setSortable(true),这将在没有基于值提供者使用渲染器时工作。您传递给 setSortProperty 的值对内存中的数据没有任何影响,因此您可以执行 setSortProperty("foo") 并且结果是相同的。