Мое решение использует Primefaces 5.2.x.
Я нашел довольно простой способ реализовать это, одна из проблем, с которыми я столкнулся при решении udik, заключалась в том, что при вызове метода onPaginate () у него не было новейшего выбранного значения.
Итак, вот что я сделал, чтобы убедиться, что вы всегда имели последнее значение и могли сохранить / загрузить его в базу данных или в файл cookie или что-то еще (мы сохраняем файл cookie).
<p:dataTable
.....
paginator="true"
paginatorPosition="bottom"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
currentPageReportTemplate="Total records: {totalRecords}, showing page {currentPage} of {totalPages}"
rowsPerPageTemplate="25,50,100"
rows="#{controller.rowsPerPage}"
.....
>
.....
<p:ajax event="page" oncomplete="rowsPerPageUpdate()" />
.....
</p:dataTable>
<p:remoteCommand name="rowsPerPageUpdate" actionListener="#{controller.onPaginate}" />
и тогда наш контроллер выглядит так:
@Dependent
@Named
public class TableController implements Serializable {
private String rowsPerPage = "25"; //default value
.....
public void onPaginate() {
//save to the cookie
}
.....
}
В основном, волшебство происходит в remoteCommand, который срабатывает после события ajax, чтобы убедиться, что controller.rowsPerPage был должным образом обновлен.