| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 09:53:33
|
fabio.massa
JavaChild
![[Avatar]](/images/avatar/71560ce98c8250ce57a6a970c9991a5f.jpg)
Membro desde: 01/12/2003 19:44:46
Mensagens: 119
Localização: Suzano
Offline
|
Fala galera,
Gostaria de saber a melhor prática para setar uma lista do meu managed bean, exemplo:
Aonde eu devo fazer a chamada para um método que faria a consulta no banco e "alimentaria" essa lista, ja vi alguns exemplos em que a lista é populada diretamente no "get", e algumas recomendações de que devo chamar um método "void" que faria esse load...qual seria a melhor prática para isso?
Agradeço antecipadamente!
|
http://blog.fabiomassa.com.br
http://twitter.com/fabiomassa |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 10:24:29
|
Joaozava
JavaChild
Membro desde: 13/09/2006 14:09:58
Mensagens: 144
Localização: São Paulo - SP
Offline
|
Até onde eu sei a chamada pode ser feita no próprio método get ... não vejo nenhum motivo específico ou vantagem que faça você criar um outro método void só pra isso.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 11:02:04
|
andrepestana
JavaEvangelist
![[Avatar]](/images/avatar/5be278a9e02bed9248a4674ff62fea2c.png)
Membro desde: 23/03/2004 09:57:28
Mensagens: 380
Offline
|
Joaozava wrote:Até onde eu sei a chamada pode ser feita no próprio método get ... não vejo nenhum motivo específico ou vantagem que faça você criar um outro método void só pra isso.
Não coloque no get, pois o JSF não garante que o get será chamado somente uma vez. Neste caso a chamada ao banco poderia ser executada várias vezes. Crie um método para popular a lista antes de acessá-la ou a popule no Construtor caso não seja uma lista dinâmica.
Dê uma olhada nesse post: http://www.guj.com.br/posts/list/108559.java e nesse site: http://www.jsf-faq.com/faqs/faces-misc.html
|
Pestana
http://andrepestana.wordpress.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 12:07:51
|
fabio.massa
JavaChild
![[Avatar]](/images/avatar/71560ce98c8250ce57a6a970c9991a5f.jpg)
Membro desde: 01/12/2003 19:44:46
Mensagens: 119
Localização: Suzano
Offline
|
andrepestana obrigado pela resposta!
Chamar um método no construtor resolveria parte do problema apenas, mas sem dúvida já foi um grande passo.
Se tiver outras sugestões eu agradeço cara!
Muito obrigado, abraços!
|
http://blog.fabiomassa.com.br
http://twitter.com/fabiomassa |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 12:42:09
|
Joaozava
JavaChild
Membro desde: 13/09/2006 14:09:58
Mensagens: 144
Localização: São Paulo - SP
Offline
|
andrepestana wrote:
Joaozava wrote:Até onde eu sei a chamada pode ser feita no próprio método get ... não vejo nenhum motivo específico ou vantagem que faça você criar um outro método void só pra isso.
Não coloque no get, pois o JSF não garante que o get será chamado somente uma vez. Neste caso a chamada ao banco poderia ser executada várias vezes. Crie um método para popular a lista antes de acessá-la ou a popule no Construtor caso não seja uma lista dinâmica.
Dê uma olhada nesse post: http://www.guj.com.br/posts/list/108559.java e nesse site: http://www.jsf-faq.com/faqs/faces-misc.html
opa, na verdade nunca tinha pensado nisso.... mas é verdade, debugando já vi várias vezes o mesmo método ser chamado mais de uma vez...
Mas no caso de ser uma lista dinânica, existe alguma solução para que não seja chamado o método de consulta mais de uma vez?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 13:59:49
|
dansouza
Debugger
![[Avatar]](/images/avatar/8e12ae4ee6dc484ecf2277a19b845658.jpg)
Membro desde: 15/08/2008 13:50:11
Mensagens: 51
Offline
|
Você também pode usar a anotação @PostConstruct.
Tipo:
Aí sempre que o MB for construido (inclusive com as instancias de outros atributos), sua lista será carregada e seu get ficará limpo:
Essa anotação só funciona com com JSF 1.2!
Veja o artigo abaixo:
JSF 1.2 RI - Bean Instantiation and Annotations
http://weblogs.java.net/blog/jhook/archive/2007/05/jsf_12_ri_backi.html
[]'s
|
Daniel Teixeira |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 16:41:40
|
andrepestana
JavaEvangelist
![[Avatar]](/images/avatar/5be278a9e02bed9248a4674ff62fea2c.png)
Membro desde: 23/03/2004 09:57:28
Mensagens: 380
Offline
|
Joaozava wrote:
andrepestana wrote:
Joaozava wrote:Até onde eu sei a chamada pode ser feita no próprio método get ... não vejo nenhum motivo específico ou vantagem que faça você criar um outro método void só pra isso.
Não coloque no get, pois o JSF não garante que o get será chamado somente uma vez. Neste caso a chamada ao banco poderia ser executada várias vezes. Crie um método para popular a lista antes de acessá-la ou a popule no Construtor caso não seja uma lista dinâmica.
Dê uma olhada nesse post: http://www.guj.com.br/posts/list/108559.java e nesse site: http://www.jsf-faq.com/faqs/faces-misc.html
opa, na verdade nunca tinha pensado nisso.... mas é verdade, debugando já vi várias vezes o mesmo método ser chamado mais de uma vez...
Mas no caso de ser uma lista dinânica, existe alguma solução para que não seja chamado o método de consulta mais de uma vez?
Eu acho que não tem como ele não ser chamado mais de uma vez. O que vc deve fazer é carregar a lista toda vez que precisar fora do get.
Eu faço assim: Tenho uma página página que lista os objetos e outra que edita. Crio dois métodos que representam a minha ação no managedBean: public String listar() e public String editar(). No método listar eu carrego minha lista e mando para a página de listagem de objetos. Agora vamos supor que o meu objeto tenha uma lista com objetos filhos. Para buscar os objetos filhos eu faço uma busca no banco pelo id do objeto pai. Então no método editar eu pego o objeto selecionado, busco a lista de objetos filhos, carrego minha lista de objetos filhos e mando para a página de edição.
Entendeu?
Abraço,
|
Pestana
http://andrepestana.wordpress.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 22:11:00
|
fabio.massa
JavaChild
![[Avatar]](/images/avatar/71560ce98c8250ce57a6a970c9991a5f.jpg)
Membro desde: 01/12/2003 19:44:46
Mensagens: 119
Localização: Suzano
Offline
|
dansouza fiz alguns testes aqui e funcionou como você disse, nem imaginava que poderia ser feito com annotations, vou estudar isso, mas de antemão lhe agradeço muito!
andrepestana boa alternativa essa cara, só fazia isso para edição, para telas tipo formulario eu nunca chamava nenhum método do bean, só as propriedades mesmo...isso também resolveria esse problema de não ter que chamar nada no get.
Valew galera!, muito obrigado!
|
http://blog.fabiomassa.com.br
http://twitter.com/fabiomassa |
|
|
 |
|
|