Passar parametro jsf

Oi pessoal,

Estou com problema para passar parametro entre páginas. O Cenário é o seguinte:

Tem uma pagina que tem um menu.
No action do menu tem o nome de uma página que está mapeada no menu faces-config.
Clico no menu e a página é chamda, porém, quero passar um objeto e recuperá-lo no bean que controla a página de destino.

Como faço isso?

Se você tiver um actionListener você pode passar o parametro via <f:param> e no listener pegar o objeto.

Eu não tenho um actionListner, o que tenho é o seguinte:

Tenho uma página que é controlada por um bean que tem o parâmetro que quero passar,
essa página tem o menu que possui um action que está mapeado no meu faces-config,
A linha do menu é a seguinte:

<rich:menuItem value="cadastro" action="cadastrar_cidade" ></rich:menuItem>

Quando ocorre o clique nesse menu, a nova página é chamada. Essa nova página tem um bean
para controla-lá. No construtor desse bean quero pegar o valor que está nop outro bean
que controlava a página antiga.

Esse é o meu problema.

Você quer pegar o ManagedBean então?

Use o ELResolver do FacesContext para isso.

não precisa ser um action listener pra usar o <f:param>

você pode usar o f:param tranquilamente, independente de ser um action ou um action listener

se você quiser usar SOMENTE no faces, você pode botar também como atributo, que é bem legal ;D

abraço

Oi pessoal,

vcs poderiam colocar um pequeno exemplo para ilustrar melhor?
Valeu!

Eai cara,

Bom ai vai um exemplo.

No Construtor do bean que cuida da action cadastrar_cidade vc consegue pegar o bean que está com o dado preenchido.

O código abaixo faz isso.

FacesContext.getCurrentInstnce().getApplication.EvaluateExpressionGet(facesContext.getCurrentInstance(), “nomeDoBeanQueQueroPegar” NomeDoBeanQueQueroPegar.class);

Falou

Valeu Ferryman,

vou tentar.

não sugiro a usar EvaluateExpression, somente em casos MUITO específicos, como por exemplo acessar um BackingBean de sessão

pra você pegar os parâmetros:

1- dentro do teu commandButton ou commandLink, você colocar assim:

<h:commandButton value="Testar meus parâmetros" action="#{meuBean.testarAction}> <f:param name="parametroTeste" value="funcionou!" /> </h:commandButton>

2- Depois no teu método de action

public String testarAction() { String s = (String) FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get( "parametroTeste" ); log.info( s ); return "success"; }

E pronto =)