【问题标题】:Primefaces datatable and current page not workingPrimefaces数据表和当前页面不起作用
【发布时间】:2017-03-19 14:51:20
【问题描述】:

我正在使用 Prime Faces 6.0。

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

这是数据表的代码

<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 -> 0 预期错误 1
  • 用户切换到第三页。 getCurrectPage -> 1 错误预期 2
  • 用户切换到第一页。 getCurrentPage -> 2 错误预期 0

我可以通过什么方式解决这个问题? 谢谢

【问题讨论】:

    标签: jsf primefaces jsf-2


    【解决方案1】:

    基数为 0,但您的事件函数似乎很快就会运行。

    尝试在 event="page" 以外的地方运行您的函数。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-05
        • 2013-10-02
        • 2012-11-19
        • 1970-01-01
        • 2014-12-13
        • 1970-01-01
        • 2019-07-13
        • 1970-01-01
        相关资源
        最近更新 更多