Мы используем 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), но это не помогло. Мы что-то упустили? Любые указатели были бы очень полезны.
Спасибо.