Estou tendo problemas p/ fazer a comunicação entre Managed Beans.
1º situação: tenho o MB Login, qdo faço o login seto o codigo do usuario. Preciso recuperar o codigo do usuario logado em outros MB.
2º situração: tenho um servlet p/ gerar relatorio jasper reporte, preciso enviar o parametro de um componente jsf p/ ele. Criei um MB onde seto o paramentro do componente jsf ai preciso recuperar esse parametro no servlet.
Se puder me ajudar agradeço,
qual o escopo dos seus managed beans?
se estiver na sessão não tem problema
você pode recuperar o mnaged bean da sessão
ou jogar o usuário logado na sessão apenas
normalmente quando o managed bean tem o escopo na sessão, o objeto dele está na sessão com o nome igual ao nome que você deixou ele configurado no faces config, o mesmo nome que você chama ele na sua página web por exemplo.
meu MB esta assim:
loginBack
backingbean.LoginBacking
session
mas não consigo chamar loginBack na classe do MB, na pagina jsf consigo!
consegue sim
olhe o código abaixo:
String ref = "nomeDoSeuManagedBean";
FacesContext facesContext = FacesUtil.getFacesContext();
ELContext elContext = facesContext.getELContext();
ExpressionFactory factory = facesContext.getApplication().getExpressionFactory();
MeuManagedBean meuBean = (MeuManagedBean) factory.createValueExpression(elContext, "#{" + ref + "}", Object.class).getValue(elContext);
Este código recupera o seu mbean da sessão e faz o cast para o objeto que você deseja
desse jeito não vai mesmo
te passei um código no post anterior
é so você substituir ali a variável ref pelo o nome do seu mbean
que vai te retornar uma instância do seu mbean que está na sessão
adicoone o seguinte método na sua classe:
public static Object getBean(String ref) {
FacesContext facesContext = FacesUtil.getFacesContext();
ELContext elContext = facesContext.getELContext();
ExpressionFactory factory = facesContext.getApplication().getExpressionFactory();
return factory.createValueExpression(elContext, "#{" + ref + "}",Object.class).getValue(elContext);
}
e dai onde você desejar recuperar o seu mbean de login faça
int cod = ((LoginBacking) getBean("loginBack")).getCodigo;
entendi, mas a classe FacesUtil? é de alguma biblioteca?
não
FacesUtil é uma classe minha
esqueci de substituir
use o fonte abaixo:
public static Object getBean(String ref) {
FacesContext facesContext = FacesContext.getCurrentInstance();
ELContext elContext = facesContext.getELContext();
ExpressionFactory factory = facesContext.getApplication().getExpressionFactory();
return factory.createValueExpression(elContext, "#{" + ref + "}",Object.class).getValue(elContext);
}
Deu certo, muito obrigado.
de nada
quando sua dúvida é resolvida se lembre de colocar a tag [RESOLVIDO]
no título do post
abraço