2017-09-07 11 views
0

안녕하세요, 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); 
} 
+0

통화 순서 변경. 먼저'addValueChangeListener'를 호출하고'setValue' 바로 다음에 호출해야합니다. 리스너 코드를 실행하고 컨테이너를 필터링해야합니다. – Shirkam

답변

0

. 그러나 addValueChangeListener 전화로 setValue 전화로 전환하면됩니다.

값을 설정하기 전에 수신기를 설정하면 ValueChangedEvent이 트리거됩니다.

+0

여기에서와 같은 방법의 순서를 변경해야한다는 의미입니까? timePeriodSelector.addValueChangeListener (this :: onWeekChange); timePeriodSelector.setValue (3); 그것은 작동하지 않습니다 : ( –

+0

그래, 내가 생각한 것은 모두 당신이해야한다고 생각했다. addValueChangeListener (x -> Notification.show (x.toString())'를 사용하여 코드를 시도하고 addValueChangeListener 전에 setValue가 호출되면 그러나 나중에 호출되면 알림이 표시됩니다. –

+0

다른 아이디어 : 'setItems' 또는 유사한 것을 호출하여'eventsOverview'에 대한 Dataprovider가 설정되어 있습니까?'setValue'가 호출 될 때까지 Dataprovider가 아직 설정되지 않았습니다. 아직 필터링 할 데이터가 없습니다. –