Primefaces:在datatable上设置页面

我在primefaces中有一个数据表,我想,当我在其中添加一行时,查看数据表的最后一页。

我的.xhtml页面是:

 ... 

... ...

... function setTabIndexTT(){ tbl1.getPaginator().setPage(#{calculatePageTable.pageTableTemplate}); }

豆:

 @ManagedBean @SessionScoped public class CalculatePageTable { private int pageTableTemplate = 0; private int pageTableField = 0; public void setPageTableTemplate() { final DataTable d = (DataTable) FacesContext.getCurrentInstance().getViewRoot() .findComponent("form:templateTable"); pageTableTemplate = d.getPageCount() - 1; } public int getPageTableTemplate() { return pageTableTemplate; } public void setPageTemplateField() { final DataTable d = (DataTable) FacesContext.getCurrentInstance().getViewRoot() .findComponent("detailsTable:webTemplateUpdateTable"); pageTableField = (d.getPageCount() - 1); } public int getPageTableField() { return pageTableField; } } 

但是onsccess ajax永远不会调用js函数setTabIndexTT()…

添加行时如何设置数据表的最后一页?

Primefaces版本是3.1.1

在您的托管bean中,您可以尝试以下代码:

 public void setPageDataTable() { final DataTable d = (DataTable) FacesContext.getCurrentInstance().getViewRoot() .findComponent("form:templateTable"); int first = 1; if (d.getRowCount() % ROWS_DATATABLE == 0) { first = (d.getRowCount() - ROWS_DATATABLE); } else { first = (d.getRowCount()/ROWS_DATATABLE)*ROWS_DATATABLE; } d.setFirst(first); } 

添加新行时调用此方法

如果datatable widgetVar是dataTableWidget,那么使用:

  

我会在没有任何JavaScript的情况下完成。 Primefaces的数据表有一个first属性,它是要显示的第一个数据的索引。

  ...  

你的支持豆:

 public class CalculatePageTable { private int first = 1; public int getFirst(){ return first; } public void addRow(){ // 1. your stuff for adding the row ... // 2. switch to the row first = getFirstRowOnLastPage(); } private int getFirstRowOnLastPage(){ ... } } 

您可以通过使用绑定来避免代码中的显式ID:

XHTML:

  

豆:

 public class CalculatePageTable { private DataTable dataTable; public DataTable getDataTable() { return dataTable; } public void setDataTable(DataTable dataTable) { this.dataTable = dataTable; } /* See Teg's answer */ public void setPageDataTable() { int first = 1; if (dataTable.getRowCount() % ROWS_DATATABLE == 0) { first = (dataTable.getRowCount() - ROWS_DATATABLE); } else { first = (dataTable.getRowCount()/ROWS_DATATABLE)*ROWS_DATATABLE; } dataTable.setFirst(first); } }