簡體   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