0

I set some initial Filters in my lazyDataModel preRenderComponent-Method.

Filtering work as expected, but the values are not shown in the column filters in the browser.

What must i do to achieve this?

    public abstract class GenericStatefulDataModel<T extends IdEntity> extends LazyDataModel<T> {

    ...
    ...

    public void preRenderComponent() {
        if (dataTable == null){
            dataTable = (DataTable) UIComponent.getCurrentComponent( FacesContext.getCurrentInstance() );
        }

        DataModelState requestMapState = (DataModelState) requestMap.get( this.getClass().getName() + "/model" );
        
        if( requestMapState != null ) {
            state = requestMapState;
            logger.debug( "State in preRender: " + state );
        }

        /** set Filter */
        if( dataTable.getFilters().isEmpty() && !initialized && requestMapState != null ) {
            dataTable.reset();
            dataTable.setFilters( state.getFilters() );
        }
        
    ...
    ...

UPDATE


Got it running with the following approach:

I'm using a generic superclass which handles loading of tabledata from the database. Subclassed from this, there is a datamodel-Class for each datatable.

State is saved in the requestmap, user can additionally save the state in user settings (XML on disk at the moment).

I had to bound the filterValues for each column on the subclassed modelclass. So, from the generic class the method

@Override
public void initFilterValues(Map<String, Object> filters) {
    filterFieldOne = (String)filters.get("fieldOne");
    filterSektor = (Sektor)filters.get("sektor");
    filterFieldThree = (String)filters.get("fieldThree");
}
...
Getters&Setters
...

is called and filters in the state are applied on this values.

This is useful espacially for filters on own classes, so that I can access database in the model:

<f:facet name="filter" >
    <p:autoComplete id="selectSektor"
            queryDelay="1000" 
            value="#{platzModel.filterSektor}" 
            completeMethod="#{platzModel.sektorSuche}"
            var="sektor" 
            itemLabel="#{sektor.name}"
            itemValue="#{sektor}"
            converter="#{platzModel.sektorConverter}">
        <p:ajax event="itemSelect"
            onsuccess="PF('tablePlaetze').filter()" />
        <p:ajax event="clear"
            onsuccess="PF('tablePlaetze').filter()" />
    </p:autoComplete>
</f:facet>
sws
  • 1
  • 5

0 Answers0