如何使用自定义过滤计算Richfaces DataTable中显示的行?

时间:2014-07-02 10:31:32

标签: jsf richfaces

我正在使用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
} 

我尝试使用计数器(名为&#39;过滤&#39;),但其值不变。

2 个答案:

答案 0 :(得分:0)

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;

}

public Integer getTotalShow(){
    return all.size();
}

private Set all = new HashSet();

  

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

答案 1 :(得分:0)

假设list是您的对象列表

在过滤器的开头重置计数器,每次过滤对象时增加计数器(return false),然后显示列表的大小减去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;
}