Недавно мы заметили, что не все из них работают. В журнале нет ни ошибок, ни исключений, ничего.
У нас есть один метод для добавления всех фильтров в строковые столбцы во всем приложении: он добавляет текстовое поле в 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);
Код: Выделить всё
public boolean searchForOffer(Offer offer) {
return name.length() == 0 || StringUtils.containsIgnoreCase(String.valueOf(offer.getName()), name);
}
Вызывается прослушиватель, я могу его отладить, вызывается dataProvider.refreshAll(), но он никогда не вызывает метод фильтра как и в других сетках.
В чем здесь может быть проблема? Я проверил, dataProvider.getItems() — это тот же экземпляр списка, который устанавливается при вызове Grid.setItems().
Мы используем Vaadin 14 (только Java), Java 11.
Подробнее здесь: https://stackoverflow.com/questions/745 ... lter-which