0

我在我的lazyDataModel preRenderComponent-Method 中设置了一些初始过滤器。

过滤按预期工作,但值未显示在浏览器的列过滤器中。

我必须做什么才能实现这一目标?

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

更新


使用以下方法运行它:

我正在使用一个通用超类来处理从数据库加载表数据。从这个子类化,每个数据表都有一个数据模型类。

状态保存在 requestmap 中,用户可以另外将状态保存在用户设置中(目前是磁盘上的 XML)。

我必须为子类模型类上的每一列绑定 filterValues。所以,从泛型类的方法

@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
...

被调用并将状态中的过滤器应用于此值。

这对于自己类上的过滤器特别有用,因此我可以访问模型中的数据库:

<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>
4

0 回答 0