[英]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.