2016-11-29 1 views
0

J'essaie d'appliquer simultanément deux types de filtrage différents à un NatTable. Chaque filtre fonctionne correctement, mais ils ne fonctionnent pas comme je le souhaitais lorsqu'ils sont combinés.NatTable Filtering

  • La première chose que je fais est de faire un appel à la FilterList.setMatcher() pour réduire le nombre de lignes en fonction de critères externes
  • La prochaine chose que je fais est d'utiliser la FilterRowHeaderComposite pour appliquer un filtrage supplémentaire, mais il semble ignorer l'entrée (même si je vois l'entrée/icône dans la cellule d'en-tête de filtre) et aucun filtre est appliqué

Ci-dessous quelques extraits de code de base qui montrent ce que j'ai installé ...

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); 
} 

Toute aide serait appréciée. Merci!

Répondre

1

Vous essayez de mélanger les filtres appliqués par programme avec les filtres appliqués par l'utilisateur via la ligne de filtre. Cela ne fonctionne pas de cette façon que la ligne de filtre traite les matchers sur le FilterList et il n'est pas possible d'identifier les filtres qui sont ajoutés par qui.

Pour prendre en charge le mélange de filtres statiques avec des filtres définis par l'utilisateur, vous devez utiliser le DefaultGlazedListsStaticFilterStrategy qui prend en charge l'ajout de filtres statiques supplémentaires.

Un exemple est disponible dans l'application NatTable Exemples -> Exemples Tutorial -> GlazedLists -> Filter -> GlazedListsStaticFilterExample (_6033_GlazedListsStaticFilterExample.java)

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

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

Un filtre statique peut alors être appliquée par l'intermédiaire d'

filterStrategy#addStaticFilter(Matcher); 

Actuellement, aucune méthode claire n'est disponible. Il est seulement possible de supprimer un filtre appliqué précédemment. Mais n'hésitez pas à créer un ticket d'amélioration pour la compensation et fournir un correctif.