Oracle ADF : Comment annuler le filtrage sur une af:table ?

Le cas étudié est de pouvoir annuler un filtrage appliqué sur un tableau (à travers l’action sur un bouton de commande) afin de revisualiser l’ensemble des lignes.

Résolution du cas d’étude

Binder le tableau depuis la page jsp où il se trouve vers un managed bean, dans notre exemple nous appellerons filteredTable l’objet RichTable créé pour le tableau dans le managed bean.
Un tableau avec la built-in fonctionnalité de filtrage ADF activée se présente comme suit :

	< af:Table value="#{bindings.MyTable.collectionModel}" var="row"
                        rows="#{bindings.MyTable.rangeSize}" id="tLog"
                        fetchSize="#{bindings.MyTable.rangeSize}"
                        rowBandingInterval="1"
                        filterModel="#{bindings.MyTableQuery.queryDescriptor}"
                        queryListener="#{bindings.MyTableQuery.processQuery}"
                        filterVisible="true" varStatus="vs"
                        selectedRowKeys="#{bindings.MyTable.collectionModel.selectedRow}"
                        selectionListener="#{bindings.MyTable.collectionModel.makeCurrent}"
                        rowSelection="single"
                        contentDelivery="immediate"
		        binding="#{backingBeanScope.backing_filter_table.filteredTable}" />

On remarque que le filtrage est implémenté au travers d’un filterModel :

		filterModel="#{bindings.MyTableQuery.queryDescriptor}"

Implémenter dans le managed bean la méthode appelée depuis le bouton de reset des filtres :
La javadoc précise que l’attribut filterModel doit être lié à une classe FilterableQueryDescriptor.
Or cette classe contient une méthode getFilterCriteria retournant la map des inputs des filtres du tableau.
L’application du clear() de la map permet de remettre à zéro les inputs des filtres .
Pour finir on applique un queryEvent au tableau pour le mettre à jour .
Au final, on obtient le code suivant :

/**
 * Reset the filtering on the filteredTable
 */
public void resetFiltering() {
	FilterableQueryDescriptor queryDescriptor =
		FilterableQueryDescriptor) filteredTable.getFilterModel();
	if (queryDescriptor != null && queryDescriptor.getFilterCriteria() != null) {
		queryDescriptor.getFilterCriteria().clear(); // Empty inputs used for filtering
		// Queue a query event to the Table for removing the effects of the filtering
		filteredTable.queueEvent(new QueryEvent(filteredTable, queryDescriptor));
	}
}