Jsf 如何使用自定义筛选计算Richfaces数据表中显示的行数?

Jsf 如何使用自定义筛选计算Richfaces数据表中显示的行数?,jsf,richfaces,Jsf,Richfaces,我使用的是Richfaces 4.1.0 final,我想计算过滤后显示的行数。我正在使用自定义过滤器功能: public Filter<?> getSessionNameFilterImpl() { Filter<Object> temp = new Filter<Object>() { @Override public boolean accept(Object item) { if (ses

我使用的是Richfaces 4.1.0 final,我想计算过滤后显示的行数。我正在使用自定义过滤器功能:

public Filter<?> getSessionNameFilterImpl() {
    Filter<Object> temp = new Filter<Object>() {
        @Override
        public boolean accept(Object item) {
            if (sessionNameFilter(item)) {
                return true;
            } else {
                filtered--; //counter for recording how many rows were denied
                return false;
            }
        }
    };
    return temp;
}

private boolean sessionNameFilter(Object item) {
    //filter implementation here
} 
公共筛选器getSessionNameFilterImpl(){
过滤器温度=新过滤器(){
@凌驾
公共布尔接受(对象项){
if(会话名称筛选器(项目)){
返回true;
}否则{
已筛选--;//用于记录拒绝的行数的计数器
返回false;
}
}
};
返回温度;
}
专用布尔sessionNameFilter(对象项){
//这里的过滤器实现
} 
我尝试使用一个计数器(名为“filtered”),但它的值没有改变

public Filter<?> getSessionNameFilterImpl() {
Filter<Object> temp = new Filter<Object>() {
    @Override
    public boolean accept(Object item) {
        if (sessionNameFilter(item)) {
           all.add(item);
            return true;
        } else {
          all.remove(item);
            return false;
        }
    }
};
return temp;
private Set all=new HashSet()

注意:必须调用all.clear();当您更新数据表源时


假设
list
是您的对象列表

在筛选开始时重置计数器,每次筛选对象时增加计数器(
返回false
),然后显示列表大小减去筛选的
计数器:

...

List<Object> list;
int filtered;

...

public Filter<?> getSessionNameFilterImpl() {
    filtered = 0;

    Filter<Object> temp = new Filter<Object>() {
        @Override
        public boolean accept(Object item) {
            if (sessionNameFilter(item)) {
                return true;
            } else {
                filtered++; //counter for recording how many rows were denied
                return false;
            }
        }
    };
    return temp;
}

public int getRowCount(){
    return list.size()-filtered;
}
。。。
名单;
整数滤波;
...
公共筛选器getSessionNameFilterImpl(){
过滤=0;
过滤器温度=新过滤器(){
@凌驾
公共布尔接受(对象项){
if(会话名称筛选器(项目)){
返回true;
}否则{
filtered++;//用于记录拒绝的行数的计数器
返回false;
}
}
};
返回温度;
}
public int getRowCount(){
返回列表.size()-已过滤;
}

如果您有datatable的数据模型,那么您可以使用
dm.getRowCount()从模型中检索行数。此时,过滤是数据模型内部的操作,您不需要任何附加功能。使用自定义过滤器rowCount=fullRowAmount-filtered。目前我不使用数据模型,但我似乎很有希望。你能用例子的链接发布一个答案吗?
...

List<Object> list;
int filtered;

...

public Filter<?> getSessionNameFilterImpl() {
    filtered = 0;

    Filter<Object> temp = new Filter<Object>() {
        @Override
        public boolean accept(Object item) {
            if (sessionNameFilter(item)) {
                return true;
            } else {
                filtered++; //counter for recording how many rows were denied
                return false;
            }
        }
    };
    return temp;
}

public int getRowCount(){
    return list.size()-filtered;
}