Primefaces数据表和当前页面不起作用

时间:2017-03-19 14:51:20

标签: jsf primefaces jsf-2

我使用的是Prime Faces 6.0。

我有一个带有LazyDataModel的数据表。用户可以使用内置分页器更改页面。 当用户从第一页切换到第二页时,我需要知道currentPage,我需要在客户端部分。

这是数据表的代码

<p:dataTable
  id="listingsTable"
  value="#{listingsLazyDataModel}" 
  var="actualAd" 
  paginator="true"
  rows="#{applicationScopedBean.advertisingsPaginationSize}"
  lazy="true"
  paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
  rowsPerPageTemplate="10,20,30"
  paginatorPosition="bottom"
  widgetVar="listingsTableDesktop"
  first="#{searchAdvertisingModel.currentPage*applicationScopedBean.advertisingsPaginationSize}">

...
...
<p:ajax event="page" listener="#{listingsController.pageChanged}" oncomplete="pageChangedOnDetails(PF('listingsTableDesktop'))" />
...
---
</p:dataTable>

这是js代码

function pageChangedOnDetails(listingsTableDesktop){
    console.log(listingsTableDesktop.paginator.getCurrentPage());
}

问题是getCurrentPage()方法返回上一页。不是实际的。仅供参考,页面为0。因此第一页是第0页。

实际行为与预期行为的示例

  • 用户登陆页面并查看第一页。
  • 用户切换到第二页。 getCurrentPage - &gt; 0错误预期1
  • 用户切换到第三页。 getCurrectPage - &gt; 1错误预期2
  • 用户切换到第一页。 getCurrentPage - &gt; 2错误预期0

我可以通过哪种方式解决这个问题? 谢谢

2 个答案:

答案 0 :(得分:0)

基数为0但你的事件函数很快就会运行。

尝试在其他地方运行您的功能,然后使用event =&#34; page&#34;。

我的意思是,当您的页面为1(默认)并且您在第3页上单击时,它会输出0(0 + 1 =第1页),并且仅在它转到第3页之后。如果您现在单击第6页,它输出2(2 + 1 =第3页),并且仅在它转到第6页之后。

即使使用oncomplete而不是onclick,也会发生这种情况。希望它有所帮助。

答案 1 :(得分:0)

此问题是PF 6.0和6.1中发现的错误,但使用当前版本(6.2)时,此问题已解决