2016-02-18 3 views
0

Я не знаю, прав ли я, но насколько я знаю, количество страниц, показанных на rich: datascroller, основан на размере списка, заполняющего данные.rich: datascroller количество страниц в зависимости от общего количества записей, а не от количества строк из данных datatable

Но вот что: предположим, что в общей сложности будет показано 20 записей. Я просто хочу запросить 10 из них и сделать так, что на datascroller есть две страницы. Я не могу запросить все мои записи, потому что может быть время, которое составляет более 300 000 записей. Я не могу оставить его в памяти. В любом случае, это может быть достигнуто?

Вот мой код до сих пор:

<rich:datascroller for="grdPemissoes" maxPages="5" 
    reRender="contentResultadoTable, labelResultados" 
    page="#{actionDivisao.pageIndex}" 
    pageVar="#{actionDivisao.totalPages}" 
    eventsQueue="queueScroller" 
</rich:datascroller> 
<rich:dataTable id="grdPemissoes" rowClasses=" ,td_cinza" 
    value="#{actionDivisao.listaResultados}" 
    styleClass="table table-search-result" 
    var="divisao" rowKeyVar="row" 
    rows="#{actionDivisao.registrosPorPagina}"> 
         //columns 
</rich:dataTable> 

Поскольку всегда есть 10 записей, нет никаких страниц, которые будут показаны. Я использую richfaces 3 и jsf 1.2.

+0

Вы можете взять эти 20 записей и поместить их в '# {actionDivisao.listaResultados}' – Makhiel

+0

То же самое, что и запрос всех результатов и их размещение в памяти. Я просто хочу запросить первые 10 результатов и позволить datascroller думать, что есть более 10 записей, поэтому страницы будут отображаться –

+0

Когда модель данных используется для таблицы данных, тогда количество страниц = listSize/recordPerPage. Но в этом случае вам не нужно хранить весь список в памяти. Вы можете получать записи, относящиеся к текущей странице. Или вы всегда можете получить этот размер вдвое и отобразить его на двух страницах. –

ответ

1

В таблицах используется dataModel (javax.faces.model.DataModel или класс, расширяющий его), если вы хотите изменить поведение по умолчанию, например. возвращает размер, отличный от того, сколько записей вы загрузили, вам нужно будет реализовать свой собственный DataModel и передать его значение атрибута таблицы:

public class MyDataModel extends org.ajax4jsf.model.ExtendedDataModel { 

    @Override 
    public int getRowCount() { 
     return this.list.size() + 10; // or something 
    } 

    … 
} 

Вы можете проверить пример в showcase.

Смежные вопросы