@scarzhe escreveu:
Boa noite! Pesquisei, pesquisei e pesquisei, testei, testei e testei... mas ainda não encontrei nada que me desse uma luz na resolução deste problema. Então, resolvi fazer meu primeiro tópico aqui.
É o seguinte. Tenho um bean que contém uma listagem. Essa listagem é preenchida por uma procedure.
Essa consulta já é paginada no banco de dados. Então, ela recebe a quantidade de registros que podem ser mostrados na tela, mais o número da página que está sendo pesquisada.Ocorre que quem implementou a lógica, para paginar, incluiu registros nulos na lista para que desse o total de registros do banco.
Vou colocar um trecho do código (não posso colocar td por questões contratuais.... =/)
MeuBean:
List<MinhaClasse> listaAUX = new ArrayList<MinhaClasse>(); if( minhaLista.size() > 0){ for (int i = 0; i < minhaLista.get(0).getTotalRegistrosBanco(); i++){ Integer linha = (( getPagina() * getRowsPerPage()) - getRowsPerPage()); if ( linha == i){ listaAUX.addAll(minhaLista); i += (minhaLista.size() - 1); }else{ listaAUX.add(i, null); } } } minhaLista.clear(); minhaLista.addAll(listaAUX);
No trecho acima se eu tenho 14 registros no banco e tenho que mostrar 10 na primeira página, ele completa com 4 nulos... Se eu utilizo o sortBy do meu xhtml, ele joga os nulos para cima (cada linha tem um botão de editar e excluir, passando o id)
meuXHTML
<rich:dataTable value="#{meuBean.minhaLista}" binding="#{meuBean.dataTableMinhaLista}" var="minhaLista" id="tableResult" rows="#{meuBean.rowsPerPage}" rowClasses="rowOdd,rowEven" styleClass="noBorder" width="920px" headerClass="headerTable" immediate="true" rowKeyVar="idx" > . . . <span style="cursor: hand; cursor: pointer; float: left; positon: relative;" class="rich-datascr-button" id="xpto" onclick="Event.fire(document.getElementById('formTable:dataResultScroller_table'), 'rich:datascroller:onscroll', {'page': 'first'});"> «« </span> <rich:datascroller for="tableResult" maxPages="3" styleClass="noBorder" boundaryControls="hide" style="float:left; positon: relative;" stepControls="hide" fastControls="hide" ajaxSingle="false" id="dataResultScroller" actionListener="#{meuBean.pesquisarActionListener}" onbeforedomupdate="Richfaces.hideModalPanel('panelStatusPesquisaRel');" /> <span style="cursor: hand; cursor: pointer; float: left; positon: relative;" class="rich-datascr-button" id="xpto1" onclick="Event.fire(document.getElementById('formTable:dataResultScroller_table'), 'rich:datascroller:onscroll', {'page': 'last'});"> »» </span> <h:inputText value="#{meuBean.rowsPerPage}" id="pageField" size="1" style="float: right; positon: relative;"> <a4j:support event="onkeyup" id="support" requestDelay="500" ignoreDupResponses="true" reRender="resultSection, dataResultScroller" oncomplete="#{rich:component('dataResultScroller')}.switchToPage(2); #{rich:component('dataResultScroller')}.switchToPage(1);Richfaces.showModalPanel('panelStatusPesquisaRel');" /> </h:inputText>
Alguém pode me dar uma luz? Pesquisei sobre lazy model, mas não sei se deveria seguir ou não por esse caminho... ou se sei lá, seria mais prático através de expressão não mostrar os valores nulos, se bem que imagino q isso acabaria impedindo a paginação do jeito que ela está.
Obrigada desde já.
Mensagens: 3
Participantes: 3