[RESOLVIDO] - Ciclos de Vida do JSF

Olá amigo, estava desenvolvendo uma aplicação com o primefaces 3.4 e a implementação do JSF -> Apache MyFaces.

Ao começar um novo projeto, aceitei as bibliotecas que o JBoss Tools me deu sobre o JSF -> Mojarra.

Notei um comportamento muito sombrio ^_^, ao migrar para o Mojarra notei que o meu ManagedBean fazia tipo 8 consultas para popular um dataTable, seja ele do Primefaces ou do próprio JSF.

Testei com o datatable do Richfaces e deu na mesma.

Alguém conheceria uma forma de explicar porque aconteceu essa variação? Ou o que está acontecendo não é pela mudança de minha implementação do JSF.

Olá, você deve estar populando a lista da tabela com o método acessor (get/set) da lista. Desta forma ele passará varias vezes por estes métodos.
O ideal é você criar um método “populaLista” e chamar uma única vez e não usar os (get/set) para nada além de seus objetivos, que é ter uma forma de acessar uma propriedade de uma classe.

Até onde eu sei o ciclo de vida é o mesmo para qualquer implementação JSF.

Para entender melhor sobre o ciclo de vida sugiro a você: http://balusc.blogspot.com.br/2006/09/debug-jsf-lifecycle.html

Otimo link, realmente vi dicas boas lá. Obrigado !

[quote=tirq]O ideal é você criar um método “populaLista” e chamar uma única vez e não usar os (get/set) para nada além de seus objetivos, que é ter uma forma de acessar uma propriedade de uma classe.
[/quote]

Esse é um comportamento/bug que até hj ninguem entende muito bem pq ocorre,o que vc pode fazer é carregar a lista condicionalmente:

  public void getLista(){
     if(lista==null) lista = carregaLista();
}

Opa! Da forma como o raf4ever, também vai funcionar, mas no meu ponto de vista get/set não deve ser nada mais que uma forma de busca a propriedade do método.
Mas concordo que irá funcionar das duas formas. :wink:

Você pode fazer pelo get como mostrado aqui, e você também pode criar um método e anotar com @PostConstruct.

Cada abordagem tem sua vantagem/desvantagem. [=

Olá, implementei utilizando o @PostConstruct. :slight_smile:

[quote=darksteel3000]Olá, implementei utilizando o @PostConstruct. ^_^[/quote]Legal.
O PostConstruct é tipo que um eager load e o get é um lazy load.

Ambos funcionam do mesmo modo, e como o post já esta resolvido, vou ficar falando mais ñ. Mahuahuah [=