我有一个PrimeFaces(5)DataTable,喜欢在页面中存储页面大小选择,以便用户在返回视图时看到相同数量的行。
但我从文档中看到的是,有一个page
事件可以捕获,但它不会给我当前选择的页面大小。我得到的最接近的是获取事件的源(DataTable)并获取rows属性,但它只包含在应用新值之前的行数。
在SO上,我找到了a solution here,但在我看来,这不是实现它必须使用一些内联JQuery东西的最好方法。
在我看来,在会话中保持页面大小选择是一个不那么奇特的功能,所以我必须有一个很好的解决方案吗?
答案 0 :(得分:3)
正如您已经注意到的那样,在所选行数已应用于表之前,{em}已触发page
事件。目前,在更改行数后,没有被触发事件。
但是,有一种可行的解决方法:
page
- 没有任何监听器的事件。相反,在ajax请求完成后调用<p:remoteCommand>
。<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