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>