34 comments on “Paginacao Por Demanda com JSF – Parte 4

  1. Achei bem interessante a serie de posts sobre paginação por demanda.

    Também estou tento os mesmos problemas de performance que aconteceu com você.

    Implementei o código descrito nesses artigos. Funcionou quase perfeitamente.

    O único problema encontrado até agora foi a ordenação. Quando o dataTable vai ordenar os resultados, ele repete as linhas da tabelas. Sabe alguma solução para este problema?

  2. Parabéns pelo excelente post, estava faltando algo assim em nossa língua mãe.
    Você chegou a deparar com este problema :

    java.io.NotSerializableException: org.richfaces.component.html.HtmlDataTable

    Pesquisando na internet encontrei uma solução que mandar colocar um modificar “transient” na variável, mas quando faço isso as coisas pioram veja o erro:

    java.lang.NullPointerException – /WEB-INF/componentes/pesquisa.xhtml @73,85 value=”#{pesquisaBean.dataModel}”: Error reading ‘dataModel’ on type

    Atenciosamente

  3. Boa tarde, estou implementando a paginação sob demanda e não está funcionando, já copiei tudo o que tinha no site mas ainda nada, poderia me ajudar por favor ?

    Quando clico na segunda página o datascroller não traz novos registros, é como se ficasse sempre na primeira página…

    []’s e Obrigado

  4. Estou realmente impressionado com este material!!

    Nunca encontrei algo tão bem elaborado (nem em inglês) sobre paginação em JSF como estes artigos. Você realmente está de parabéns e não é só porque me ajudou muito numa implementação recente e semelhante a esta, mas também por ser de qualidade e auxílio a muitos outros…

    Meu sinceros parabéns!!

    Sucesso!

  5. Muito bom o post, está de parabéns!

    Estou com uma dificuldade que o meu datascroller não exibe a quantidade de páginas e nem funciona as opções de proxima, anterior, primeira e ultima. Faz a pesquisa delimitando corretamente mas não consigo ir paginando por exemplo de 10 em 10 – 20 em 20..paginas 1 de 100.
    Obrigado e mais uma vez, parabéns!

    • Você colocou o atributo “rows” no datatable?
      Quanto as funcionalidades, não saberia o que esta ocorrendo.

  6. Gostei muito da implementação da paginação.
    Encontrei um problema e gostaria de saber se alguem teve o mesmo problema.

    Como a chamada da função de pesquisa(Select na base de dados) fica direto no get associado no DataTable (getDataModel). Devido ao siclo do JSF, em varios momentos a consulta é executada várias vezes sem necessidade.

    Como exemplo a consulta na base é executada várias vezes ao mudar a página (usar o rich:datascroller), 2 vezes com os parámetros antigos da página e a ultima com os parámetros certos da próxima página.

    OBS: A implementação que fiz não utiliza do Hibernate, e utiliza Bean de request.

    Alguma sugestão? Posso enviar os código.
    Fico no aguardo.

    • Marlesson,

      Acredito que o problema de ser renderizado várias vezes é porque o dataScroller esta dentro do datatable e a cada linha ele executa o get novamente. Estarei disponibilizando, em breve, uma nova forma de fazer paginação em demanda sem ficar preso a qualquer framework (primefaces, richfaces, etc) utilizando apenas objetos do proprio java.
      Abraços!!!

    • No caso esta implementação é especifica para o richfaces, então não teria como utilizar c:foreach, mas estarei disponibilizando uma implementação que não ficará preso a nenhum framework de tela.
      Abraços!!!

  7. Antes de mais nada, reforcçarei o que o Diogo Souza disse:
    Também estou mto impressionado com o material, achei bárbaro! Parabéns.

    Mas agora, como nem tudo são flores…rsrsrs…gostaria de saber sobre um problema que tem ocorrido comigo, que é o seguinte:

    Fiz toda a implementação das classes faladas e ocorreu que minha Rich:DataTable não é renderizada novamente com os dados corretos, se eu tento via ajax, mas qdo tento normalmente ela renderiza, debuguei o sistema mas nao acho a solução, Será que você poderia me ajudar com isso?

    Abraços e fique com DEUS!

    • Não entendi bem, por exemplo, eu utilizo ajax em alguns projetos e o que é preciso fazer é renderizar novamente a tabela, o problema ocorre na renderização da tabela, ainda não entendi o porque, dessa forma eu coloco um panelgroup e a tabela dentro e mando renderizar o panelgroup ai a tabela renderiza normalmente, é como se fosse preciso dar um render no pai da tabela.

  8. Maravilha de post, so um detalhe, como aplico a ordenação das colunas, e um campo de filtro para pesquizar em toda a minha lista por um resultado????

    • Desculpa a demora.
      Bom, seguinte, pra ordenar vc teria que implementar uma regra especifica de order.
      A nível de tela não tem como pois o que esta sendo exibido é apenas os resultados da tela, o resto não veio na consulta.
      Você pode sobrescrever o método que faz a ordenação no componente e ao clicar no tipo de ordenação você pode executar a consulta passando qual a coluna foi ordenada e qual a forma de ordenação.

  9. Olá, Marcus,
    Primeiramente quero parabenizá-lo por algo tão bem elaborado.
    Porém ao executar o seu código me deparei com alguns problemas…
    No instante onde tem isso:

    public PagedDataModel(List list, int totalNumRows) {
    super();
    setWrappedData(list);
    this.totalNumRows = totalNumRows;
    this.pageSize = list.size();
    }

    Não funcionou muito bem, o compilador exigiu que trocasse o nome do método para o nome da classe:
    public PagedDataModel(List list, int totalNumRows) {

    Mas, apesar de funcionar neste ponto, encontrei dificuldades….
    Na hora de implementar num rich:dataTable tive problemas…
    O layout da página simplesmente some quando clico no botão de próximo e não vai à próxima página…
    Gostaria de saber o que errei, se errei ou é bug da versão do Rich (4.2.3).
    E o que deveria fazer para funcionar…
    Ficaria mais interessante ver através de um código de exemplo.
    Quero saber se há disponibilidade de dispô-lo…
    Muito obrigado e mais uma vez parabéns pela disponibilização do código.

  10. Era um bug em uma biblioteca chamada GUAVA, por isso não conseguia.
    Consegui após substituir sua versão, a dica talvez valha para quem não conseguiu anteriormente nos seus comentários…
    Muito obrigado pela maravilhosa explanação

    • Teria que analisar, qual o problema esta ocorrendo? Já vi pessoas comentando que existiam mais páginas do que deveriam existir e isso se da ao fato do “count” esta sendo feito de forma equivocada. Pode ser um problema na implementação do próprio datamodel… realmente não sei… faz um bom tempo que eu não tenho trabalhado com richfaces e realmente optei em não me prender a tecnologia.

      Se for possível tente mudar para esta outra implementação de paginação em demanda que eu escrevi:
      Paginação que você não fica preso ao richfaces e no momento que precisar alterá-lo, caso ocorra, tua paginação continuará a funcionar.
      Abraços!!!

    • Outro caso que pode estar ocorrendo é que, ao renderizar novamente sua datatable, o css não esta sendo renderizado (já vi isso ocorrer mas não sei o porque… :P), o melhor seria mandar renderizar a tabela via ajax, mas ai acaba ocorrendo outro problema (pelo menos com o primefaces ocorre) que seria, a tabela não renderiza via ajax. Pra solucinar este problema basta colocar a tabela dentro de um panelgroup e mandar renderizar o panelgroup, é como se fosse necessário renderizar o pai da tabela… ainda não entendi muito bem porque isso ocorre…

  11. Marcus, vi também sua implementação por AbstractList, também achei interessante, mas reparei que a “Por demanda” em questão parece mais elaborada.
    Realmente, a questão de páginas não foi o problema.
    Ocorre na parte de editar o erro, quando tenho um link a4j:commandButton, ou ao executar mais uma vez a tabela, abrir mais uma vez o dataTable através do método, um execute resolveu parte do problema, mas, como uso uma CollaspibleSutbTable ainda tá meio enrolado…
    Já uso um panelGrid, e testei o panelGroup como disse, mas, nada feito…
    algumas pessoas disseram que era a versão, uso a 4.3, e já usei a 4.2 para ver se era isso, mas não deu nada, ainda o que resta é trocar a versão do rich ou a implementação da paginação…. e ter mais paciênia..

  12. Marcus, retirando o binding=”#{classeBean.uiDataTable}” ele funcionou adequadamente como eu esperava.
    Quero saber se ao retirar isso vou ter algum problema.

  13. Grande Marcos, te agradeço imensamente pela solução que me ajudou a entregar um projeto pessoal.
    Só tinha um problema que passei algumas vezes – o layout simplesmente sumia se chamasse a dataTable de alguma forma novamente, então para solucionar incluí este código no web.xml:

    org.richfaces.resourceMapping.enabled
    true

    org.richfaces.resourceMapping.packedStages
    All

    Espero que possa ser útil para outros leitores do seu site.

    • Tinha também esse detalhe que deve haver no template:

      Não sei se aconteceu a outros leitores, mas tive esse problema até conseguir resolver com essa solução – se alguém tiver passado pelo mesmo problema e tiver uma solução mais trivial… estaria aberto à sugestões.
      Obrigado

  14. Olá Marcos, blz?
    Então, estou tentando usar seu exemplo e parece está tudo certo, mas não consigo renderizar os dados, sempre dá erro de id duplicado nas colunas das linhas. Passou por algum problema parecido que conseguistes resolver?

    • O que pode estar fazendo é colocando um ID dentro do componente datatable, dai ele vai se repetir, tira o id das colunas e vê se funciona. Blz?

      • Valeu Marcus (agora está certo :D) pela resposta. Então, não é isso não, porque eu já havia tentado sem e com ID nas colunas. Na verdade eu nunca coloco ID nas colunas sem necessidade, mas mesmo eu colocando, na teoria o jsf deveria tratar isso e gerar ids diferentes pra mim, por exemplo: na minha coluna se eu coloco id=”col” o jsf deveria fazer pra cada linha algo tipo: id=”nometabela:col1″, na próxima linha id=”nometabela:col2″ … mas não é isso que está acontecendo. Achei até estranho isso acontecer, porque não vejo esse erro desde que parei de trabalhar com a versão 1.1 do JSF, no 1.2 isso dificilmente acontecia e 2.0 eu nunca tinha visto acontecer. Cheguei até a mudar de implementação, tava com a Mojarra, teste a MyFaces mas nada :'(

        • Cara, eu teria que ver realmente o código.
          Faz muito tempo que não mexo nesse código. Hoje utilizo uma abordagem mais desacoplada, não voltada a frameworks. Hoje estou trabalhando com AbstractList em uma implementação de uma classe própria que realiza a paginação de acordo com a minha necessidade. Caso tenha interesse o link é esse:

          http://www.marcusmazzo.com.br/?p=70

          Outra coisa… muitas coisas mudaram em relação ao richfaces, hoje eu trabalho com primefaces e preferi essa abordagem desacoplada. Funciona com richfaces, primefaces, c:foreach… veja se não resolve essa forma desacoplada. Qualquer coisa me manda a parte de código que eu tento dar uma olhada.

          Abraços!!!

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>