繁体   English   中英

Primefaces数据表自定义分页未更新

[英]Primefaces datatable custom pagination not updating

我正在开发一个拥有较旧代码库(Struts 1)的应用程序,现在正在使用JSF构建一个较新的代码库,以与其他(旧)应用程序一起运行。 我们在应用程序中拥有的较旧的数据表针对分页显示以下内容:

“显示50个条目中的1到20”

我的任务是获取新的PF数据表以相同的方式显示。

通过覆盖primefaces DataRenderer类的encodePaginatorMarkup方法,我能够在第一页工作。 页面更改时出现问题-未调用此方法来更新分页。 这使我感到困惑,因为当前页面(以及其他所有内容)在常规分页模板中得到更新,而没有调用此方法。

我查看了更改页面时发送回的AJAX响应,但看不到生成用于更新分页的任何HTML(仅是总数)。 这使我相信,一切都在JS中处理。

我目前正在考虑实现它的方式是使用f:ajax来更改页面,并在oncomplete传递中使用表的widgetVar值,并具有一种通用方法,该方法将基于该数据表的属性更新分页在JS中。 这似乎有点过分,如果不需要,我不想使代码过于复杂。

有没有更好的方法来解决这个问题? 还有其他建议吗?

好吧,因为没有其他输入,所以我继续使用page事件来实现它:

<p:dataTable id="users" widgetVar="userTable" paginator="true" rows="20" sortBy="userId">
    <p:ajax event="page" oncomplete="setTimeout(function() { update_pagination('userTable'); }, 0)" />

    ...
</p:dataTable>

setTimeout是必需的,因为从oncomplete调用时JS对象仍然没有更新-因此我将其撞到了下一个事件循环中,该循环中的值是最新的。

这是update_pagination JS函数:

function update_pagination(table) {
    table = PF(table);

    var paginator = table.cfg.paginator;

    var $pageStart = $(table.jq).find('.paginator_pagestart');
    var $pageEnd = $(table.jq).find('.paginator_pageend');

    $pageStart.html(paginator.page*paginator.rows+1);
    $pageEnd.html(Math.min(paginator.rowCount, paginator.page*paginator.rows+paginator.rows));
}

我将表名称传递给它,获取实际的PF对象,然后使用cfg的分页器部分更新显示的当前条目。 我使用Math.min是因为在最后一页上它可能没有足够的数据,并且我不希望它显示“显示7个条目中的1到20个”,而是“显示7个条目中的1到7个”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM