【发布时间】:2025-07-28 03:05:02
【问题描述】:
我正在使用 vaadin 8。此网格包含许多列。两列将文本字段作为组件列,因为用户想要以字符串格式输入内容。因此,我们在两列中都使用了 TextField 组件。这是通过使用 grid.addComponentColumn 方法完成的。即使在启用 setSorting(true) 之后,排序似乎也不适用于这两列。
addComponentColumn(DataGrid::getUserMessage).setId("userMessage").setSortable(true).setCaption("UserMessage");
我尝试了以下两件事,但仍然没有排序。
第一
addComponentColumn(DataGrid::getUserMessage).setId("userMessage").setSortable(true).setCaption("UserMessage").setComparator((p1, p2) -> p1.getUserMessage().getValue().compareTo(p2.getUserMessage().getValue()));
第二
addComponentColumn(DataGrid::getUserMessage).setId("userMessage").setSortable(true).setCaption("UserMessage").setSortOrderProvider(direction -> Arrays.asList(new QuerySortOrder("userMessage", direction)).stream());
数据网格是包含列名及其设置器/获取器的类。 我怎样才能使这项工作?有人可以通过sn-p演示吗
更新以下解决方案有效!这段代码是为了改进在使用比较器时对包含空值的排序
@Override
public int compare(final DataGrid a, final DataGrid b) {
if (a.getUserMessage().getIntegerValue() == null && b.getUserMessage().getIntegerValue() == null) {
return 0;
}
if (a.getUserMessage().getIntegerValue() == null) {
return -1;
}
if (b.getUserMessage().getIntegerValue() == null) {
return 1;
}
return a.getUserMessage().getIntegerValue().compareTo(b.getUserMessage().getIntegerValue());
}
);```
【问题讨论】:
标签: grid vaadin8 vaadin-flow columnsorting vaadin-grid