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