【问题标题】:How to filter Vaadin grid as default如何将 Vaadin 网格过滤为默认值
【发布时间】:2017-09-07 10:50:15
【问题描述】:

您好,我正在尝试在 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。它应该运行监听器代码并过滤你的容器。

标签: java vaadin vaadin8 vaadin-grid vaadin4spring


【解决方案1】:

那段代码看起来不错,这就是 Grid 过滤器的意图。 但是,您所要做的就是将您的 setValue 呼叫转换为您的 addValueChangeListener 呼叫。

在设置值之前设置监听器确保ValueChangedEvent被触发!

【讨论】:

  • 你的意思是我需要像这里一样改变方法的顺序吗? timePeriodSelector.addValueChangeListener(this::onWeekChange); timePeriodSelector.setValue(3);它不起作用:(
  • 是的,这就是我认为您需要做的所有事情。我用addValueChangeListener( x -&gt; Notification.show(x.toString()) 尝试了您的代码,如果在 addValueChangeListener 之前调用 setValue ,则不会显示通知。但是,如果之后调用它,则会显示通知。
  • 另一个想法:eventsOverview 的 Dataprovider 是否通过调用 setItems 或类似的方法设置?如果在调用 setValue 时尚未设置 Dataprovider,则还没有可供过滤的数据
猜你喜欢
  • 2018-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 2017-12-08
相关资源
最近更新 更多