JSF Datatable с ленивой загрузки, фильтрации и сортировки - PullRequest
6 голосов
/ 22 мая 2010

Я работал над несколькими проектами с большим количеством таблиц данных. Таблицы имели сортировку, фильтрацию и разбиение на страницы, конечно же, на стороне сервера и с помощью базы данных (во всех базах данных реализована сортировка, фильтрация и ограничение возвращаемых результатов).

При работе с реальным приложением тысячи и даже миллионы строк.

Но я видел несколько компонентов с данными JSF.
Они реализуют разбиение на страницы, сортировку и фильтрацию на стороне клиента! По мне, это очень глупо. Эта технология называется enterprise, и они сортируют данные на стороне клиента с помощью java-скрипта!

Я не видел ни одной хорошей сетки данных JSF, которая бы имела встроенные функции для сортировки, фильтрации и отложенной загрузки на стороне сервера.

Почему это? Я смотрю в неправильном направлении или нет поддержки сборки для этого. В последнее время я тестирую основные лица и ленивую загрузку данных. Это действительно отлично работает, но таблицу я могу только лениво загружать. Если вы добавите сортировку и фильтр, тогда начнутся проблемы.

Вывод: Есть ли какой-либо компонент JSF с датой, который может выполнять разбиение на страницы с отложенной загрузкой, фильтрацию и сортировку на стороне сервера? Если мне нужно реализовать собственное решение благодаря командам, которые выполняли сортировку и фильтрацию на стороне клиента, они бесполезны.

1 Ответ

5 голосов
/ 22 мая 2010

Нет, нет.Поскольку библиотека компонентов не может знать, каким будет механизм сохранения.

Однако многие таблицы данных предлагают варианты представления этого.Например, таблица данных richfaces имеет так называемую DataModel.Например, что мы сделали:

public class CustomDataProvider implements DataProvider<ClassToShow>,
        Sortable2, Filterable { .. }


public class PagingExtendedTableDataModel<T> extends ExtendedDataModel implements
        Serializable, Modifiable {

    private DataProvider dataProvider;
    private Object rowKey;
    private List wrappedKeys;
    private Map wrappedData;
    private Integer rowCount;
    private Integer rowIndex;
    private List<FilterField> filterFields;
    private List<SortField2> sortFields;

    public PagingExtendedTableDataModel(DataProvider<T> dataProvider) { .. }

}

Вам нужно будет реализовать все методы так, чтобы это соответствовало вашему механизму персистентности

...