Chamar método ao carregar página [JSF]  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
yorgan
GUJ Ranger
[Avatar]

Membro desde: 14/08/2006 19:41:31
Mensagens: 888
Localização: Floripa/SC
Offline

Olá Pessoal,
Estou com uma dúvida, preciso chamar um método no bean com escopo de sessão sempre que uma página for carregada. Alguém sabe se existe uma tag para isso?
Estou utilizando JSF + RichFaces.

[]´s

Daniel
[Email] [WWW]
alves.Felipe
GUJ Ranger
[Avatar]

Membro desde: 21/01/2008 13:45:56
Mensagens: 766
Localização: Curitiba - Pr
Offline

cara.. conseguiu resolver isso?

Felipe Alves
[Email]
reinaldo558
JavaBaby

Membro desde: 21/06/2007 16:45:01
Mensagens: 78
Localização: Brasil - SP
Offline

Você pode inserir a chamada do método nas classes que são carregadas antes da sua página, ex.

A página1 tem um botão de ação que vai para a página2 (página2 seria o seu jsp que precisa pegar a sessão)
Quando o botão é acionado, é chamada uma classe que faz o que tem que fazer e no final chama seu método e envia as variáveis para a sessão, depois retorna para a página2.

A página2 apenas recolhe as variáveis da sessão.

Reinaldo Elias
alves.Felipe
GUJ Ranger
[Avatar]

Membro desde: 21/01/2008 13:45:56
Mensagens: 766
Localização: Curitiba - Pr
Offline

cara.. acontece que eu chamo minha página no menu assim:

então não passa pelo meu controller antes de abrir a página...

Felipe Alves
[Email]
bronx
JavaTeenager
[Avatar]

Membro desde: 24/08/2009 02:59:47
Mensagens: 197
Offline

alves.Felipe use o commandLink. Aponte o atributo "actionListener" para o método do teu managed bean.
Lembrando que esse método não deve ter retorno (void) e deve receber como parâmetro um ActionEvent (do faces, não da awt!).

Quanto ao (já muito velho e, presumo eu, resolvido) caso do yorgan: resolveu teu problema?

Também estou precisando de uma tag (ou qualquer outra coisa) que permita executar um método qualquer do meu managed bean. Se é que isso existe...
Se alguém souber de alguma maneira, por favor, share!!

reinaldo558
JavaBaby

Membro desde: 21/06/2007 16:45:01
Mensagens: 78
Localização: Brasil - SP
Offline

Para chamar um método qualquer durante o carregamento da página, sem qualquer ação do usuário, eu simplesmente crio um objeto do tipo "input hidden" e atribuo para ele uma variável do bean, da mesma forma como faço em qualquer campo texto, porém no "get" desta variável não retorna apenas um return valor, mas sim a chamada do meu método e depois um return "" (vazio).

Pode não ser uma prática cinco estrelas, mas funciona.

This message was edited 1 time. Last update was at 24/08/2009 09:34:56


Reinaldo Elias
22-Gers
JavaChild

Membro desde: 01/09/2006 15:22:02
Mensagens: 131
Localização: Belo Horizonte
Offline

Se vc usar o pattern mvc é fácil resolver esse problema. Cada página de vcs tem um managedBean por trás certo? Esse managedBean deve sempre ser do escopo request(em 99,99% dos casos) e devemos usar o keepAlive od a4j para que não morra enquanto estamos na página. Sendo assim, se queremos executar um método assim que carregarmos a página é só colocarmos uma chamada a esse método no construtor do managedBean, isso irá chamar o método assim que a página for renderizada, pois o ciclo de vida do JSF instancia a sua classe java assim que carrega sua página. Eu uso dessa maneira..... []´s

Bacharel em Computação - Viva cada dia como se fosse o último... um dia você acerta!

Tudo vale a pena quando a alma não é pequena...
[MSN] [ICQ]
reinaldo558
JavaBaby

Membro desde: 21/06/2007 16:45:01
Mensagens: 78
Localização: Brasil - SP
Offline

Realmente desta forma é muito mais elegante e funciona, acabei de testar.

Nota: Que falta faz não ler a documentação do framework, pelo que você explicou, isso é um comportamento básico que eu deveria saber já que o estou utilizando.


Reinaldo Elias
22-Gers
JavaChild

Membro desde: 01/09/2006 15:22:02
Mensagens: 131
Localização: Belo Horizonte
Offline

É sim, faz parte do ciclo de vida do jsg. Isso resolve quase que 100% dos casos. Em um ou outro vc tem outras opções, como por exemplo usar a tag <a4j:page> que tem um evento onload, dai vc poderia usar o <a4j:support e executar o método que vc quiser pra executar junto com a página.

Mas eu ainda prefiro o construtor...hehe.. []´s

Bacharel em Computação - Viva cada dia como se fosse o último... um dia você acerta!

Tudo vale a pena quando a alma não é pequena...
[MSN] [ICQ]
lessandronp
JavaChild
[Avatar]

Membro desde: 31/07/2008 14:27:02
Mensagens: 119
Offline

Vocês podem achar essa prática até interessante, inclusive eu a utilizava. Porém verifiquei, que pelo fato do construtor carregar o que vem do controller, vários "selects" são executados sem necessidade, pelo motivo de qualquer chamada get que a página jsf dá em algum atributo ele entra no construtor. Estou tentando verificar uma maneira de algum cara chamar o método do controller, que preenche o form ao carregar a página jsf somente. Já tentei onLoad, mas não resolve, pois tenho q dar um reRender na tabela da pagina do jsf, e com isso ao chamar uma segunda página ele executa a renderização da tabela novamente e o redirecionamento para a outra página não funciona.
Abs,
Lessandro

This message was edited 1 time. Last update was at 23/02/2010 10:08:30

[Email] [WWW] [MSN]
alias
Virtual Machine Man

Membro desde: 11/06/2007 11:09:34
Mensagens: 598
Offline

De fato utilizar o construtor do managed bean de escopo "request" é a solução ideal para esse caso. No entanto, o colega disse que o seu bean é de sessão...

Acho isso uma falha do jsf, nao tratar a página como um objeto, como no Asp.net, por exemplo...onde voce pode usar o evento load da página. No jsf tem que sambar um pouco pra fazer isso...

lessandronp, esse problema que voce cita, pode ser resolvido usando uma tag para persistir o estado do bean de request (como o a4j:keepAlive que os colegas citaram)
lessandronp
JavaChild
[Avatar]

Membro desde: 31/07/2008 14:27:02
Mensagens: 119
Offline

Eh, vou dar uma olhada nesse cara.
O meu form é de escopo request e o controller session, pois não quero q um form dure a sessão inteira sem necessidade, ocupando instância na memória.
De qualquer forma consegui resolver o problema em partes, onde faço algo para verificar a página atual no construtor. De acordo com a página específica eu faço algo:



Mas mesmo assim ele faz duas requisições na lista de listarUsuarios, ao abrir a página a URL atual é de exibirUsuarios, porém ao clicar em algum item da tabela para abrir o cara selecionado, ele ainda
não mudou a url e executa mais uma vez. Teria que verificar a FaseListener para saber qual o estado atual desse cara. Ainda estou pesquisando algo, sem alguem souber como, agradeço desde já,
Abs,
Lessandro

This message was edited 1 time. Last update was at 23/02/2010 11:26:08

[Email] [WWW] [MSN]
rafaelbtz
Java Ninja
[Avatar]

Membro desde: 29/03/2005 10:53:56
Mensagens: 276
Offline

Só pra acrescentar eu estou usando o 2.0 e ai basta fazer


[Email]
alias
Virtual Machine Man

Membro desde: 11/06/2007 11:09:34
Mensagens: 598
Offline

rafaelbtz wrote:Só pra acrescentar eu estou usando o 2.0 e ai basta fazer




Aí sim...fomos surpreendidos novamente.
lessandronp
JavaChild
[Avatar]

Membro desde: 31/07/2008 14:27:02
Mensagens: 119
Offline

Eh, me arrebentou do mesmo jeito, rs
Estou trabalhando com o jsf 1.2 e o facelets não tem suporte a metadata.
:/
Abs,
Lessandro
[Email] [WWW] [MSN]
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team