vaadin 网格排序 bigDecimal 列

标签 vaadin vaadin-grid vaadin14

我已将 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") ,结果将是相同的。

关于vaadin 网格排序 bigDecimal 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68037586/

相关文章:

java - Vaadin 14 - 未找到 BeanManager 类

java - vaadin 如何有选择地将复选框放在树表上

css - 在 vaadin 中编辑文件 css

java - Vaadin 网格行编号

java - 如何通过过滤计算 Vaadin 8 网格页脚中的总数

vaadin - 编辑网格时是否可以在 GridPro 上的 Vaadin 14 中显示保存/取消按钮

Vaadin 14 主题 - 使用 "include"

java - 在java中使用嵌套泛型

java - Vaadin7 如何从服务器下载文件?

css - 瓦丁 8.2.0 : How to vertical align image in grid cell