Primefaces - пользовательская проблема разбиения на страницы / сортировки () - PullRequest
1 голос
/ 13 января 2012

Мы используем Primefaces 3.0.RC2 в нашем приложении со швами и CDI. Мы следили за реализацией таблицы загруженных данных на витрине компонента. Поскольку у нас большой набор данных, мы переопределили метод load () для получения только постраничных результатов. (против загрузки всех записей в память одновременно).

Разбивка на страницы работает, как и ожидалось, а сортировка - нет. Записи сортируются правильно при первом нажатии на заголовок столбца. Для всех последующих нажатий метод load () вызывается дважды, посылая различные значения для порядка сортировки, в результате чего порядок сортировки в таблице остается неизменным. Похоже, что оба вызова load () выполняются на этапе APPLY_REQUEST_VALUES.

Может ли кто-нибудь предоставить какие-либо данные о том, почему это происходит и как этого можно избежать. Любые указатели будут высоко оценены.

Некоторая дополнительная информация: Как было сказано ранее, мы переопределили метод load () и фактически запросили у БД запрос отсортированных результатов по страницам (указав в запросе максимальный результат и порядок в), и он работает нормально.

@Override
public List<ABC> load(int first, int pageSize, String sortField, SortOrder
sortOrder, Map<String, String> filters)
{
    // Fetch data pagewise from the database
    datasource = dao.findPagewiseSortedResults(sortField,
            SortOrder.ASCENDING == sortOrder ? true : false, first, pageSize);

    // Set the row count
    this.setRowCount((int) dao.findTotalCount());

    return datasource;
}

Однако при нажатии на столбец в модели данных для сортировки делается 2 почтовых запроса.

Найдите под кодом xhtml:

        <p:dataTable id="dataTable" var="record"
        value="#{testBean.lazyModel}" paginator="true" rows="5"
        paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport}           {NextPageLink} {LastPageLink}"
        selectionMode="single" selection="#{testBean.selectedRecord}"
        sortBy="#{record.username}">

        <p:ajax event="rowSelect" listener="#{testBean.onRowSelect}"
            update=":form:display" oncomplete="accountDialog.show()" />

        <p:ajax event="colResize" update=":form:growl"
            listener="#{testBean.onResize}" />

        <p:column sortBy="#{record.username}"
            filterBy="#{record.username}">
            <f:facet name="header">
                <h:outputText value="User Name" />
            </f:facet>
            <h:outputText value="#{record.username}" />
        </p:column>.........

        </dataTable>

Мы даже обновили до последней версии Primefaces (3.0.1), но это не помогло. Мы что-то упустили? Любые указатели были бы очень полезны.

Спасибо.

1 Ответ

0 голосов
/ 20 января 2012

Поскольку вы предоставляете сортировку с помощью метода load (), вам не нужно использовать собственный инструмент сортировки dataTable.Вам необходимо удалить атрибут sortBy из тега p:dataTable.

Компонент должен быть определен следующим образом:

<p:dataTable id="dataTable" var="record"
    value="#{testBean.lazyModel}" paginator="true" rows="5"
    paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport}           {NextPageLink} {LastPageLink}"
    selectionMode="single" selection="#{testBean.selectedRecord}" >

РЕДАКТИРОВАТЬ

Таким образомваш столбец будет сортироваться точно в порядке, указанном клиентом: вы прочитаете указанный SortOrder с опубликованным вами Java-кодом и, следовательно, будете использовать этот SortOrder в своей реализации dao # findPagewiseSortedResults ()

...