Я использую 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());
Сетка данных - это класс, который содержит имена столбцов и их установщики / получатели. Как я могу заставить это работать? Может кто-нибудь продемонстрировать это отрывком
Обновление ниже, решение работает! Этот фрагмент кода предназначен для улучшения сортировки, содержащей нулевые значения, при использовании компаратора.
@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());
}
);```