【问题标题】:PrimeFaces get the current page number on page change eventPrimeFaces 在换页事件中获取当前页码
【发布时间】:2012-12-01 13:01:43
【问题描述】:

我有一个primefaces datatable。 我需要使用客户端 API 知道 page change event 上的当前页码。

我正在使用,

<p:ajax event="page" oncomplete="myFunction(usersWidget);"/>

在 myFunction() 里面我有

debugger;
console.log(usersWidget.paginator.getCurrentPage());

问题是,页面事件的oncomplete 内部的回调在分页器上设置新页面(PrimeFaces.widget.Paginator.setPage) 之前被调用。我用调试器跟踪了这一点。

话虽如此,在 oncomplete 回调中,我会得到上一个页码,而不是当前页码。

如果我在点击页面链接后设置页面后可以得到回调,我就会知道当前页面。

编辑: 文档说它是在 ajax 完成和 DOM 更新后调用的回调。 那么可能有什么问题呢?

请指点?

【问题讨论】:

    标签: javascript jsf-2 primefaces datatables


    【解决方案1】:

    这很奇怪,导致页面更新后会调用 oncomplete...

    调用oncomplete="myFunction();"传递参数怎么样?

    您可能会以这种方式传递旧对象(带有过时的信息)... usersWidget 无论如何都是全局变量... ans 应该存在于您的 js 文件中

    因为客户端 api 似乎没有与正确的值同步

    作为一种解决方法,您可以尝试像这样从服务器传递页面值

    DataTable dataTable = (DataTable) 
         FacesContext
             .getCurrentInstance()
             .getViewRoot()
             .findComponent("someOformID:someTableId");
    

    或尝试,而不是上面的行,

    PageEvent.getPage(); //PageEvent is an argument to you listener
    myPageHolder = dataTable.getPage();
    

    将这个值放到 bean 属性中并将其放入 xhtml 中的某个隐藏值中,而不是使用 p:ajax update 更新该隐藏值并从 js 中访问它

    【讨论】:

    • 首先感谢您的回答。是的,小部件战争将是一个全局对象。因此,即使我不将它传递给函数并将其用作全局对象,也不应该有任何区别。是的,它很奇怪。不过我会试试的
    • 另外,仅供参考,当我在控制台中打印对象并查看树内部时,它显示了正确的值。这有点令人困惑。所以我设置了一个断点并检查了 myFunction 内部我还没有更新值。在 myFunction 完成后,我在控制台中看到更新的值。
    • 与您建议的不传递对象并将其用作全局对象的方法相同。希望我能够正确解释我的问题。
    • 看起来像一个错误:/打开一个问题或在 primefaces 论坛上提问...无论如何,作为临时(坏)解决方案,您可以解析 subscribersexTable.paginator.currentReport 并从其文本中提取页码...例如usersWidget.paginator.currentReport[0].innerText
    • @Mashit 您可以检查您的客户端解决方案是否在 3.4 之前的版本上运行良好,其中数据表被大量重写(我认为),如果是这样,请打开一个问题......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 2011-01-02
    相关资源
    最近更新 更多