Я тоже столкнулся с этим и разработал шаблон кодирования, который может помочь. Это на самом деле не вещь из PrimeFaces (которую я тоже использую) - это скорее техника для использования закладок с JSF 2.
В разметке я включаю все параметры для страницы следующим образом:
<f:metadata>
<f:viewParam name="orderID" value="#{bean.orderID}" />
<f:viewParam name="sortMode" value="#{bean.sortMode}" />
<f:viewParam name="firstRecord" value="#{bean.firstRecord}" />
<f:viewParam name="pageSize" value="#{bean.pageSize}" />
</f:metadata>
Каждое из этих значений поддерживается в компоненте поддержки, поэтому, если они не установлены, они выдают подходящее значение по умолчанию. Например:
public int getPageSize() {
if (pageSize < MIN_PAGE_SIZE) pageSize = DEF_PAGE_SIZE;
if (pageSize > MAX_PAGE_SIZE) pageSize = DEF_PAGE_SIZE;
return pageSize;
}
Ссылка на это представление может быть сгенерирована следующим образом:
Теперь вы реализуете пользовательские элементы управления для изменения этих значений и регенерируете таблицу при каждом их изменении. Вы все равно должны использовать AJAX для этого - например:
<p:spinner value=#{bean.pageSize} >
<p:ajax update="tableID" />
</p:spinner>
В методах установки вы должны инициировать повторное создание таблицы, но в этом суть. Надеюсь, это поможет.
UPDATE:
Чтобы справиться с нумерацией страниц, вам просто нужно добавить ссылки для первой страницы, предыдущей страницы, следующей страницы и т. Д. Ссылки будут выглядеть примерно так:
<h:link value="First Page" outcome="thisPage">
<f:param name="orderID" value="#{bean.orderID}" />
<f:param name="sortMode" value="#{bean.sortMode}" />
<f:param name="firstRecord" value="0" />
<f:param name="pageSize" value="#{bean.pageSize}" />
</h:link>
<h:link value="Next Page" outcome="thisPage">
<f:param name="orderID" value="#{bean.orderID}" />
<f:param name="sortMode" value="#{bean.sortMode}" />
<f:param name="firstRecord" value="#{bean.nextRecord}" />
<f:param name="pageSize" value="#{bean.pageSize}" />
</h:link>
и т.д.. Вам необходимо реализовать свойства в компоненте поддержки, чтобы вычислить, каким должен быть параметр firstRecord .