XPages: как подсчитать строки панели просмотра с разбивкой на страницы

У меня есть панель просмотра в xpages и вычисляемое поле для отображения количества строк. У меня есть 2 проблемы:

1-й: как я могу подсчитать только строки текущей страницы пейджера? Кажется, что viewPanel.getRowCount() получает все строки с начала до текущей страницы, поэтому, если у меня есть 30 записей на странице, и я нахожусь на странице 2 , он показывает 60 вместо 30.

2-й: даже если я достигну вышеуказанного, пейджер только обновит представление, и я не могу обновить вычисляемое поле или другую панель. Могу ли я поместить вычисляемое поле в панель просмотра или сделать так, чтобы оно как-то обновлялось при каждом изменении страницы? я бы предпочел не делать этого с полным обновлением страницы, если это возможно...


person mike_x_    schedule 21.11.2013    source источник


Ответы (3)


Учитывая проблему с обновлением вычисляемого поля, даже если вам удалось получить количество строк (например, в переменной SSJS области страницы), вычисляемое поле не будет обновлено.

Может быть проще подсчитывать строки в таблице HTML, используя javascript на стороне клиента?

что-то типа ..

событие загрузки страницы:

get the HTML table
get the table rows property (array of rows in the table)

number or rows = that value (1st row = TH (header) row if there is one = row 0)

используйте javascript, чтобы вставить это значение в известный DIV

person user2808054    schedule 21.11.2013
comment
да, я пытаюсь работать над этим, но, похоже, он все еще не работает должным образом. я сообщу вам, когда у меня будут (хорошие или плохие) результаты... :) - person mike_x_; 21.11.2013

Вы также можете перехватить частичное обновление, выданное пейджером, и проверить обновленный идентификатор. Если идентификатор совпадает с идентификатором вашей панели просмотра, вы можете выполнить еще одно частичное обновление, чтобы обновить другую панель.

Пример кода для захвата частичного обновления:

var sysHijackPartialRefresh = function(){
    XSP._inheritedPartialRefresh = XSP._partialRefresh;
    XSP._partialRefresh = function( method, form, refreshId,options) {


    if (options){
        if (!options.onComplete) { 
            options.onStart = function(){ 

            };
            options.onComplete = function(){
                if (refreshId == "<client id of view panel>") {
                // issue another partial refresh
                XSP.partialRefreshGet(<client id of the other panel>);
                }
            }; 
        } 
    }
    this._inheritedPartialRefresh(method, form, refreshId, options); }
}

XSP.addOnLoad(sysHijackPartialRefresh);

См. http://xpageswiki.com/web/youatnotes/wiki-xpages.nsf/dx/Work_with_events_and_partial_or_full_refresh для получения дополнительной информации о частичных обновлениях.

person Julian Buss    schedule 21.11.2013

Пейджер должен иметь свойство «refreshID», в которое вы можете поместить идентификатор клиента (!) панели, которую вы хотите обновить. Используйте getClientId() для вычисления идентификатора клиента панели.

Для подсчета строк: используйте панель инструментов отладки XPages (из openNTF), чтобы проверить свойство панели просмотра или пейджера, которое дает вам текущий номер страницы. Если у вас это есть, вы можете просто вычислить, используя viewPanel.getRowCount() - (номер страницы * количество строк на странице).

person Julian Buss    schedule 21.11.2013