Привет, я пытаюсь написать фильтр сетки в рамках Vaadin. Моя цель состоит в том, чтобы у пользователя было поле со списком с выпадающим списком, и он мог выбрать, что он хочет видеть только записи 3, 6, 9 недель назад. Я написал его, но у меня проблема, потому что он не работает как фильтр по умолчанию. Я имею в виду, что если я открываю страницу, сетка отображается без фильтра. Мне нужно сначала нажать на кнопку. Можно ли фильтровать сетку по умолчанию, показывая только записи за 3 недели? Как мне с этим справиться?
final ComboBox<Integer> timePeriodSelector = new ComboBox<>("Time Filter", Arrays.asList(3, 6, 9);
timePeriodSelector.setEmptySelectionAllowed(false);
timePeriodSelector.setTextInputAllowed(false);
timePeriodSelector.setValue(3);
timePeriodSelector.addValueChangeListener(this::onWeekChange);
...
private void onWeekChange(HasValue.ValueChangeEvent<Integer> event) {
switch (event.getValue()) {
case 3:
dateToCompare = LocalDate.now().minusDays(21);
break;
case 6:
dateToCompare = LocalDate.now().minusDays(42);
break;
case 9:
dateToCompare = LocalDate.now().minusDays(63);
break;
default:
dateToCompare = LocalDate.now().plusDays(21);
}
ListDataProvider<CcEvent> dataProvider = (ListDataProvider<CcEvent>) eventsOverview.getDataProvider();
dataProvider.setFilter(CcEvent::getReportingDate,
date -> compareDates(date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(), dateToCompare));
}
private Boolean compareDates(LocalDate dateFromTable, LocalDate dateFromFilter) {
return dateFromTable.isBefore(dateFromFilter);
}
addValueChangeListener
и сразу после этогоsetValue
. Он должен запускать код прослушивателя и фильтровать ваш контейнер. - person Shirkam   schedule 13.09.2017