PrimeFaces分页选择

时间:2015-02-20 12:26:14

标签: jsf primefaces jsf-2.2

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

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

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

在我看来,在会话中保持页面大小选择是一个不那么奇特的功能,所以我必须有一个很好的解决方案吗?

1 个答案:

答案 0 :(得分:3)

正如您已经注意到的那样,在所选行数已应用于表之前,{em}已触发page事件。目前,在更改行数后,没有被触发事件。

但是,有一种可行的解决方法:

  • 将您的数据表绑定到支持bean
  • 使用AJAX page - 没有任何监听器的事件。相反,在ajax请求完成后调用<p:remoteCommand>
  • 将您的actionListener方法添加到<p:remoteCommand>
  • 在此方法中,检查数据表的行数。这是新的价值。
  • 请注意,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