#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 (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
}
Я пробовал со счетчиком (с именем ‘filtered’), но его значение не изменилось.
Комментарии:
1. Если у вас есть модель данных для datatable, то вы можете получить количество строк из модели с помощью
dm.getRowCount();
. В этот момент фильтрация является внутренней операцией внутри модели данных, и вам не нужны никакие дополнительные функции. С вашим пользовательским фильтром rowCount = fullRowAmount — фильтруется.2. В настоящее время я не использую DataModels, но я кажусь многообещающим. Не могли бы вы опубликовать ответ со ссылками на примеры?
Ответ №1:
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();
}
частный набор all = новый HashSet();
Примечание: необходимо вызвать all.clear(); при обновлении источника таблицы данных.
Ответ №2:
Предполагая, 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;
}