Фильтрация Vaadin Grid — DataProvider.refreshAll() не запускает фильтр, установленный в DataProvider.JAVA

Программисты JAVA общаются здесь
Anonymous
Фильтрация Vaadin Grid — DataProvider.refreshAll() не запускает фильтр, установленный в DataProvider.

Сообщение Anonymous »

В нашем приложении Vaadin много сеток, каждая из них имеет фильтры для строковых столбцов.
Недавно мы заметили, что не все из них работают. В журнале нет ни ошибок, ни исключений, ничего.
У нас есть один метод для добавления всех фильтров в строковые столбцы во всем приложении: он добавляет текстовое поле в HeaderRow. сетки с конкретным слушателем:

Код: Выделить всё

    public  void addFilterToSpecificStringColumn(ListDataProvider dataProvider, HeaderRow filterRow, String columnName, FilterObject filter) {
TextField filterField = new TextField();
filterField.setValueChangeMode(ValueChangeMode.EAGER);
filterField.addValueChangeListener(event -> {
filter.setCorrectFieldByName(columnName, event.getValue());
dataProvider.refreshAll();
});
filterRow.getCell(this.getColumnByKey(columnName)).setComponent(filterField);
}
Вот как мы добавляем фильтр:

Код: Выделить всё

dataProvider.setFilter(filterObject::searchForOffer);
и это базовый метод фильтрации FilterObject, добавленный в DataProvider методом setFilter(), и похоже, что он не всегда работает:

Код: Выделить всё

public boolean searchForOffer(Offer offer) {
return name.length() == 0 || StringUtils.containsIgnoreCase(String.valueOf(offer.getName()), name);
}
В обычном случае dataProvider.refreshAll(), вызываемый в прослушивателе текстового поля, запускает метод searchForOffer(), который проходит по элементам списка поставщиков данных один за другим и возвращает предложения, соответствующие фильтру. состояние (в данном случае имя). Это в основном перестало работать в некоторых сетках, и я не знаю, почему.
Вызывается прослушиватель, я могу его отладить, вызывается dataProvider.refreshAll(), но он никогда не вызывает метод фильтра как и в других сетках.
В чем здесь может быть проблема? Я проверил, dataProvider.getItems() — это тот же экземпляр списка, который устанавливается при вызове Grid.setItems().
Мы используем Vaadin 14 (только Java), Java 11.

Подробнее здесь: https://stackoverflow.com/questions/745 ... lter-which

Вернуться в «JAVA»