DataTable dinamica (Primefaces)

Olá pessoal estou tentando implementar o seguinte:

Vou carregar um lista de objetos no componente datatable mas preciso também filtrar esses objetos referente ao campo situação que é do tipo boolean.

Ex:Objetos com a situação em aberto devem ser carregados e os que estão com a situaçao fechado não devem aparecer.

Obs:não posso usar esse tipo de “filtro” direto do banco.

Alguem pode me dar sugestões de como fazer isso?
Agradeço desde já!

Por que não?

E iterar sobre a lista e ir removendo os itens que não se adequam ao critério de filtro, já pensou nessa possibilidade?

1 curtida

Oxe, você não pode usar where?

Se não, cria duas listas, a primeira vem todos os dados e a segunda apenas a que satisfazer a condição.

Não sei se isso te ajudaria também, mas…
https://www.primefaces.org/showcase/ui/data/datatable/filter.xhtml

1 curtida

Darlan eu n quero perder esses objetos que estão com situação fechada,quero apenas não carrega-los.Nesse caso em remover os itens com um bloco for já pensei sim!Vou Continuar pesquisando sobre, se eu achar a solução venho mostrar para vc,obrigado!

Se você não quer perdê-los, sugiro seguir a dica do @Mike, usar mais de uma lista.

1 curtida

Pois é @Mike não posso usar where,kkkk.No caso de carregar uma lista com a condiçao e a outra completa pode me esclarecer um pouco mais sua sugestão?

Tenho dúvida sobre como vou carregar as duas ao mesmo tempo com uma datatable.

Você vai carregar uma, a partir do select q fizer.
Depois, irá ter um método

public List<Blablabla> getListaDeBlablablaAberto() {
    List<Blablabla> blablablas = new ArrayList<Blablabla>();
    for(Blablabla b : blas) {
       if("Aberto".equalsIgnoreCase(b.getSituacao()) {
          blablablas.add(b);
       }
    }
    return blablablas;
}

Entendeu?
E faz um só para os fechados ou cria um método genérico, se vira aí.

1 curtida

Entendi sim @darlan_machado vou implementar aqui e muito obrigado pela atenção!

Só se basear no exemplo do @darlan_machado que é sucesso

<p:column headerText="blabla" sortBy="#{obj.status}" style="width: 20px;">
     <p:outputLabel value="#{obj.status eq 'Aberto' ? obj.status : ''}"/>
</p:column>

pra que fazer um outro Loop

1 curtida

Para deixar a lógica fora da view

mais não economiza recursos…

Você está rodando em um servidor ou em um equipamento embarcado, com limitação de memória?

No mundo acadêmico a abstração e orientação a objetos é lindo tudo maravilhoso, agora vc foi pra um sistema que baixa 6 milhôes de notas / mês pra 780 empresas, daí a coisa começa a mudar um pouco de figura

Acabei de testar de uma forma parecida como a do @blayd2015.Fiz o seguinte:

Utilizei o componente row para as colunas e coloquei a condição no atributo rendered,mas como eu sou iniciante pensei que não carregaria os dados,paciencia,kkkk.

Sim, dai você utiliza recursos mais interessantes, como paginação ou faz o filtro na query, não é mesmo?
Atualmente, você esquece do JSF e de toda sua burocracia e parte para um thin client, como angular ou vuejs mesmo.

isso mesmo…

@darlan_machado estava pesquisando e li sobre o “lazy”,eu conseguiria fazer o que quero com esse atributo?

lazy loading? Você acabaria tendo que mudar a abordagem de acesso ao banco de dados, principalmente se utiliza um ORM como hibernate, pois o lazy forçaria você a utilizar o open session in view.

A datatable do primefaces tem suporte a lazy nos atributos, da uma olhada:
https://www.primefaces.org/showcase/ui/data/datatable/lazy.xhtml
https://www.primefaces.org/showcase/ui/data/datatable/scroll.xhtml (On-demand Data)

PS: Nunca utilizei