PrimeFaces 分页器选择

PrimeFaces paginator selection

我有一个 PrimeFaces (5) DataTable 并且喜欢在视图中存储页面大小选择,以便用户在 returns 到视图时看到相同的行数。

但我从文档中看到的是有一个可以捕获的 page 事件,但它不会给我当前选择的页面大小。我得到的最接近的是获取事件的源(DataTable)并获取行属性,但它仅包含行数 before 应用新值。

在 SO 上,我发现 a solution here,但在我看来这不是实现它的最佳方式,必须使用一些内联 JQuery 东西。

在我看来,在会话中保留页面大小选择是一个不那么奇特的功能,所以我想一定有一个好的解决方案吧?

正如您已经注意到的,事件在选定的行数应用于table之前被触发。目前,在 更改行数后 没有触发任何事件。

但是,有一个可能的解决方法:

  • 将您的数据table绑定到支持 bean
  • 在没有任何侦听器的情况下使用 AJAX page-事件。相反,在 ajax 请求完成后调用 <p:remoteCommand>
  • 将您的 actionListener 方法添加到 <p:remoteCommand>
  • 在此方法中,检查数据table的行数。这是新值。
  • 请记住,page 事件不仅会在更改行数时触发,还会在页面更改时触发。

示例:

XHTML/JSF

<h:form>
    <p:remoteCommand  name="pageChanged" actionListener="#{tableBean.onPageChanged}"/>
    <p:dataTable binding="#{tableBean.table}" paginator="true"  rowsPerPageTemplate="5,10,20" rows="5">
        <p:ajax event="page" process="@none"  oncomplete="pageChanged()" />
           <!-- columns here -->
    </p:dataTable>
</h:form>

TableBean.java

private DataTable table;

public void onPageChanged(){
   int numRows = table.getRows();
   // ...
}

//getter/setter for table