我在我的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>