我也遇到了这个问题,我开发了一种可能会有所帮助的编码模式。它并不是一个真正的 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>
这些值中的每一个都支持在支持 bean 中,因此,如果未设置它们,它们会生成一个合适的默认值。例如:
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>
在 setter 方法中,您必须触发表的重新生成,但这就是它的要点。我希望这会有所帮助。
更新:
要处理分页,您只需为首页、前一页、下一页等添加链接。链接将如下所示:
<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>
等等。您需要在支持 bean 中实现属性来计算 firstRecord 参数应该是什么。