Pegar objeto de um managedBean em outro managedBean

Fala galera, blz??

Seguinte, to com uma baita dificuldade pra conseguir pegar um objeto de um bean em outro bean!

Tenho os seguintes beans:

@Name( "cotacaoCotizadorBean" )
@Scope( ScopeType.CONVERSATION )
public class CotacaoCotizadorBean extends BaseBean implements Serializable
         private	VersaoCotacaoCotizador          vCota ;
         public String cmdAvancar() {
		try {
			fgMostraTabSubgrupo = true ;
			fgMostraTabCotacoes = false ;
			//cotacao.setCdCotacao( 45872L );
			cotacao.setPlanoCotacao( planoService.recuperarPorId( cotacao.getPlanoCotacao( ).getId( )))  ;
			if( tipoSeguro )
			{
				cotacao.setTipoSeguro( "N" ) ;
			}else
			{
				cotacao.setTipoSeguro( "T" ) ;
			}
			cotacao.setCorretorCotacao( corretorSelecionado ) ;
			cotacao.setCepEstipulante( CEP.toString( ) ) ;
			if( cosseguro )
			{
				cotacao.setIcCosseguro( "S" ) ;
			}else
			{
				cotacao.setIcCosseguro( "N" ) ;
			}
			if( excedente )
			{
				cotacao.setIcExcedenteTecnico( "S" ) ;
			}else
			{
				cotacao.setIcExcedenteTecnico( "N" ) ;
			}
			cotacao.setCdRamoAtividadeEstipulante( "T1" ) ;
			cotacao.setCanalOrigem( canalOrigem ) ;
			//cotacaoCotizadorService.salvar( cotacao, usuarioLogado ) ;
			
			VersaoCorretagemCotizador vCorr = new VersaoCorretagemCotizador( ) ;
			vCorr.setTsVersao( Calendar.getInstance( ).getTime( ) ) ;
			//versaoCorretagemService.salvar( vCorr, usuarioLogado ) ;
			
			VersaoCadastralCotizador vCad = new VersaoCadastralCotizador( );
			vCad.setDtVersao( Calendar.getInstance( ).getTime( ) ) ;
			//versaoCadastralService.salvar( vCad, usuarioLogado ) ;
			
			VersaoComercialCotizador vCom = new VersaoComercialCotizador ( ) ;
			vCom.setTsVersao( Calendar.getInstance( ).getTime( ) ) ;
			vCom.setVersaoCadastral( vCad ) ;
			vCom.setVersaoCorretagem( vCorr ) ;
			//versaoComercialService.salvar( vCom, usuarioLogado ) ;
			 
			VersaoTecnicaCotizador vTec = new VersaoTecnicaCotizador( ) ;
			vTec.setTsVersao( Calendar.getInstance( ).getTime( ) ) ; 
			//versaoTecnicaService.salvar( vTec, usuarioLogado ) ;
			
			vCota = new VersaoCotacaoCotizador( ) ;
			vCota.setTsVersao( Calendar.getInstance( ).getTime( ) ) ;
			vCota.setVersaoComercial( vCom ) ;
			vCota.setVersaoTecnica( vTec ) ;
			vCota.setCotacao( cotacao ) ;
			//versaoCotacaoService.salvar( vCota, usuarioLogado ) ;
			
                        //Eu consegui fazer dessa maneira, mas sei q deve dar pra fazer de uma forma menos onerosa
			HttpSession session = (HttpSession)FacesContext.getCurrentInstance( ).getExternalContext( ).getSession( false ) ; 
			session.setAttribute( "vCadastral", vCad);
			
			setCurrentTabSheet(TAB_SUBGRUPO);
			return PAGE_COTACAO_DADOS_CADASTRAIS;

		} catch (MapfreValidacaoException v) {
			facesMessages.addFromResourceBundle(Severity.ERROR, v.getMessage());
		} catch (Exception e) {

			log.error(e.getMessage(), e);
		}
		return null;
	}
@Name( "cotacaoTabSubgrupoBean" )
@Scope( ScopeType.CONVERSATION )
public class CotacaoTabSubgrupoBean extends BaseBean implements Serializable
{

          private VersaoCadastralCotizador v ;
          public void gravarSubgrupo( )
	{
		if ( dados.size( ) == 0 )
		{
                        //aqui a forma que eu pego o objeto setado na session no outro bean
			HttpSession session = (HttpSession)FacesContext.getCurrentInstance( ).getExternalContext( ).getSession( false ) ;
			v = (VersaoCadastralCotizador)session.getAttribute( "vCadastral");
			FacesContext.getCurrentInstance( ).addMessage( "Mensagem", new FacesMessage( "Adicione ao menos um subgrupo para cadastrar!" ) ) ;
			// MensagemUtil.addInfo("Adicione ao menos um subgrupo para cadastrar!");
		}
		else
		{
			fgSubgrupoGravado = true ;
		}
		dados = new ArrayList<SubgrupoCotizador>( ) ;
	}

Entao galera eu preciso conseguir pegar ou uma instancia do bean CotacaoCotizador ou conseguir pegar o objeto versaoCadastral.

Como vocês podem ver pelas anotações estou usando seam. Li que com o seam é muito fácil, mas não to conseguindo!!!

Desde já agradeço a ajuda de todos!

String valueBinding = "#{" + beanOfSession + "}"; FacesContext ctx = (FacesContext) FacesContext.getCurrentInstance(); return (TabController) ctx.getApplication().getExpressionFactory().createValueExpression(ctx.getELContext(), valueBinding, TabController.class).getValue(ctx.getELContext());

esse codigo é a mesma coisa que #{testeCont} no seu xhtml so que pelo java ai pega o valor o bean, construindo na mao a expresao de linguagem

[quote=CristianPalmaSola10]String valueBinding = "#{" + beanOfSession + "}"; FacesContext ctx = (FacesContext) FacesContext.getCurrentInstance(); return (TabController) ctx.getApplication().getExpressionFactory().createValueExpression(ctx.getELContext(), valueBinding, TabController.class).getValue(ctx.getELContext());

esse codigo é a mesma coisa que #{testeCont} no seu xhtml so que pelo java ai pega o valor o bean, construindo na mao a expresao de linguagem[/quote]

Cara, deixa eu te perguntar, pra implementar isso meu bean não teria q ter o scopo de session???

Outra coisa o eu li e reli seu código mas não consegui entender mto bem!!! teria como explicar???

Obrigado por responder!

faz assim no bean que vc quer injetar

@ManagedProperty(value = "#{aluno}")  
private Aluno aluno;  

Nao sei testa ai para ver se funciona com bens que naum tem escopo de sessao

//crio um string para usar na criacao da expresa de lingugem a string é algo assim #{meuBean}
String valueBinding = &quot;#{&quot; + beanOfSession + &quot;}&quot;;  
//nada de mais so pego o facescontext
        FacesContext ctx = (FacesContext) FacesContext.getCurrentInstance();  
//usando o facescontext para pegar a application e expressionfactory e acessar o metodo createValueExpression para ele eu passa o el context, a expresao em srtring montada no começo do metodo e o tipo da classe que espero como retorno, quando faço getValue passando novamente o el context --&gt; expression language context, ele faz a magica dele e me retorna o valor do bean
        return (TabController) ctx.getApplication().getExpressionFactory().createValueExpression(ctx.getELContext(), valueBinding, TabController.class).getValue(ctx.getELContext());

na verda de isso é muito simples…

Nao sei testa ai para ver se funciona com bens que naum tem escopo de sessao

//crio um string para usar na criacao da expresa de lingugem a string é algo assim #{meuBean}
String valueBinding = &quot;#{&quot; + beanOfSession + &quot;}&quot;;  
//nada de mais so pego o facescontext
        FacesContext ctx = (FacesContext) FacesContext.getCurrentInstance();  
//usando o facescontext para pegar a application e expressionfactory e acessar o metodo createValueExpression para ele eu passa o el context, a expresao em srtring montada no começo do metodo e o tipo da classe que espero como retorno, quando faço getValue passando novamente o el context --&gt; expression language context, ele faz a magica dele e me retorna o valor do bean
        return (TabController) ctx.getApplication().getExpressionFactory().createValueExpression(ctx.getELContext(), valueBinding, TabController.class).getValue(ctx.getELContext());

na verda de isso é muito simples…[/quote]

Certo axo q entendi!!!

Só mais uma dúvida: essa parte eu crio em algum metodo no bean A ou no bean B??

supondo que eu quero pegar o bean A dentro do bean B!!!

Obrigado mais uma vez!

se voce esta no bean A e quer pegar o B voce tem criar o metodo no bean é claro. bem obvio isso…