NatTable Filtering

Я пытаюсь одновременно применить два разных типа фильтрации к NatTable. Каждый фильтр отлично работает сам по себе, но они не работают, как я ожидал, когда они объединены.

  • Первым делом я вызываю FilterList.setMatcher(), чтобы уменьшить количество строк на основе внешних критериев.
  • Следующее, что я делаю, это использую FilterRowHeaderComposite, чтобы применить дальнейшую фильтрацию, но, похоже, он игнорирует ввод (даже если я вижу ввод / значок в ячейке заголовка фильтра), и фильтр не применяется

Ниже приведены некоторые основные фрагменты кода, которые показывают, что я настроил...

public void basicSetup() {
    eventList = GlazedLists.eventList(values);
    TransformedList<T, T> rowObjectsGlazedList = GlazedLists.
      threadSafeList(eventList);
    sortedList = new SortedList<>(rowObjectsGlazedList, myComparator<>());
    filterList = new FilterList<>(sortedList);

    //... code ommitted

    FilterRowHeaderComposite<T> filterRowHeaderLayer = new 
      FilterRowHeaderComposite<>(
            new DefaultGlazedListsFilterStrategy<T>(bodyLayerStack.
              getFilterList(), columnPropertyAccessor, configRegistry),
            sortHeaderLayer, columnHeaderDataLayer.getDataProvider(), 
            configRegistry);

}

public void applyExternalFilter() {
    getBodyLayerStack().getFilterList().setMatcher(myCriteria);
}

public void resetExternalFilter() {
    getBodyLayerStack().getFilterList().setMatcher(null);
}

Любая помощь будет оценена. Спасибо!

1 ответ

Решение

Вы пытаетесь смешать программные примененные фильтры с пользовательскими фильтрами через строку фильтра. Это не работает таким образом, поскольку строка фильтра имеет дело с сопоставителями на FilterList и невозможно определить, какие фильтры кем добавлены.

Чтобы поддерживать смешивание статических фильтров с пользовательскими фильтрами, необходимо использовать DefaultGlazedListsStaticFilterStrategy поддерживает добавление дополнительных статических фильтров.

Пример доступен в приложении примеров NatTable -> Примеры учебника -> GlazedLists -> Filter -> GlazedListsStaticFilterExample (_6033_GlazedListsStaticFilterExample.java)

DefaultGlazedListsStaticFilterStrategy filterStrategy = new DefaultGlazedListsStaticFilterStrategy(
                    bodyLayerStack.getFilterList(),
                    columnPropertyAccessor,
                    configRegistry);

FilterRowHeaderComposite filterRowHeaderLayer =
        new FilterRowHeaderComposite(
                filterStrategy,
                columnHeaderLayer,
                columnHeaderDataLayer.getDataProvider(),
                configRegistry);

Затем можно применить статический фильтр через

filterStrategy#addStaticFilter(Matcher);

В настоящее время нет четкого доступного метода. Можно удалить только предыдущий примененный фильтр. Но не стесняйтесь создавать билет улучшения для очистки и предоставлять патч.

Другие вопросы по тегам