Estou utilizando esta versão de primefaces e estou com um problema no dataTable. Na mudança de página do resultado, ele demora muito a atualizar o dataTable, como se fosse feita a consulta novamente.
Aguem já passou por isso?
Minha base de dados é grande (banco de cep dos correios). Poderia ser esse o motivo?
Se você estiver utilizando a propriedade Lazy com o valor true no seu datatable sempre que você alterar a página ele faz uma nova requisição ao servidor e vai ao banco de dados buscar as informações. Caso esta propriedade tenha o valor false, todas informações já são carregadas e a lentidão é apenas no lado cliente pois tudo é feito por javascript.
[quote=grinche]Se você estiver utilizando a propriedade Lazy com o valor true no seu datatable sempre que você alterar a página ele faz uma nova requisição ao servidor e vai ao banco de dados buscar as informações. Caso esta propriedade tenha o valor false, todas informações já são carregadas e a lentidão é apenas no lado cliente pois tudo é feito por javascript.[/quote]Sério? Eu achava que isso dependia da configuração de estado que se encontra no web.xml. Até onde eu sei, se o estado estiver servidor os dados ficam alocados no httpSession; caso o estado esteja cliente, aí sim ficaria salvo lá.
Não estou instanciando a propriedade Lazy. Mas com certeza, ele refaz a pesquisa a cada mudança de pagina, independente da quantidade de resultados retornados. Pode ser 10 resultados ou 100, o tempo é o mesmo.
Não estou instanciando a propriedade Lazy. Mas com certeza, ele refaz a pesquisa a cada mudança de pagina, independente da quantidade de resultados retornados. Pode ser 10 resultados ou 100, o tempo é o mesmo.
[/quote]Mas para saber isso, você não pode ir pelo tempo. Você tem que debugar, ou colocar mensagens para exibir no console.
Executo a consulta uma única vez preenchendo a lista no dataTable.[/quote]E quantos registros estão voltando?[/quote]
Herbert, se voltar registros que dêem mais de 1 página, o tempo é o mesmo. Ou seja, se eu clicar na página 2/2 ele demora o mesmo tempo de se eu clicar na página 2/100.
Vou dar uma olhada novamente no web.xml pra ver o estado.
A tarde respondo, pq não estou com o projeto aqui.
Executo a consulta uma única vez preenchendo a lista no dataTable.[/quote]E quantos registros estão voltando?[/quote]
Herbert, se voltar registros que dêem mais de 1 página, o tempo é o mesmo. Ou seja, se eu clicar na página 2/2 ele demora o mesmo tempo de se eu clicar na página 2/100.
Vou dar uma olhada novamente no web.xml pra ver o estado.
A tarde respondo, pq não estou com o projeto aqui.
Obrigado pela ajuda.[/quote]Novamente, tempo não é parâmetro para se deduzir isso…
Não estou instanciando a propriedade Lazy. Mas com certeza, ele refaz a pesquisa a cada mudança de pagina, independente da quantidade de resultados retornados. Pode ser 10 resultados ou 100, o tempo é o mesmo.
[/quote]Mas para saber isso, você não pode ir pelo tempo. Você tem que debugar, ou colocar mensagens para exibir no console.[/quote]
Blz.
Um comportamento que eu achei estranho, já que sempre coloco os benditos System.out.println pra saber o que anda acontecendo, é que, quando a consulta é realizada e por exemplo, no início do método que preenche o dataTable eu coloco um System.out.println para ele me imprimir no console o nome do campo preenchido na página, no console ele me exibe a resposta do System.out.println várias vezes, e não uma só, por exemplo:
public List<Endereco> getCEP() {
String campo = this.campoBusca;
System.out.println ("campo: " + campo);
...
Sei que a pergunta pode parecer ignorante, mas me intrigou:
Só pelo fato de eu colocar o nome do método iniciando com get ele chama diversas vezes?
Eu faço uma verificação de conteudo nulo sim dentro de um if e ele só executa a consulta se o conteúdo não for null ou não for empty.[/quote]Não.
O método ele é chamado por que na tela (xhtml/jsp) tem algum componente apontando para o método. O JSF precisa fazer várias verificações/utilizações e o primefaces também.
Nunca popule um objeto dentro do método get, pois a cada requisição feita ao seu ManagedBean ele vai entrar no método get.
Crie uma propriedade no seu ManagedBean e também um método que vai popular este objeto, anote este método como PostConstruct, e então popule este e outros objetos neste método “inicial”. http://docs.oracle.com/javaee/5/api/javax/annotation/PostConstruct.html
Ou no seu xhtml utilize este evento para chamar um método que popula esta sua propriedade do managedBean.
Sei que a pergunta pode parecer ignorante, mas me intrigou:
Só pelo fato de eu colocar o nome do método iniciando com get ele chama diversas vezes?
Eu faço uma verificação de conteudo nulo sim dentro de um if e ele só executa a consulta se o conteúdo não for null ou não for empty.[/quote]Não.
O método ele é chamado por que na tela (xhtml/jsp) tem algum componente apontando para o método. O JSF precisa fazer várias verificações/utilizações e o primefaces também.[/quote]
Mas na xhtml o método esta instanciado em um commandButton, então entendo que ele só é executado quando acionado. Estou correto?