안녕하세요, Vaadin 프레임 워크에서 그리드 필터를 작성하려고합니다. 내 목표는 사용자가 드롭 다운 목록이있는 콤보 상자가 있으며 그가 3, 6, 9 주 전의 항목 만보고 싶어한다는 것을 선택할 수 있습니다. 나는 그것을 썼지 만 기본 필터로 작동하지 않기 때문에 문제가있다. 나는 필터를 사용하지 않고 그리드가 표시되는 페이지를 열면됩니다. 먼저 버튼을 클릭해야합니다. 기본적으로 그리드를 필터링하여 3 주 항목 만 표시 할 수 있습니까? 어떻게 관리 할 수 있습니까?Vaadin 그리드를 기본값으로 필터링하는 방법
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' 바로 다음에 호출해야합니다. 리스너 코드를 실행하고 컨테이너를 필터링해야합니다. – Shirkam