Dúvida JSF - Objeto dentro de outro

E ai galera, beleza?

Sou novato nesse mundo de JSF, estou aprendendo na marra pra fazer uma aplicação própria.

Enfim, estou com o seguinte problema. Tenho uma classe Usuário, relacionada com uma classe Cliente. Dentro da classe usuário, eu tenho um objeto cliente. Até aí tudo tranquilo, cadastrando beleza no banco.

Quando eu entro no sistema com e-mail e senha do usuário, queria que aparecesse “Bem-vindo NOME_DO_USUARIO”, o nome, tá na classe Cliente. Consigo carregar o usuário normal pra sessão, mas quando tento colocar no JSP #{usuario.cliente.nome} não me retorna nada.

Quando eu coloco o usuário na sessão, já verifiquei, e o atributo CLIENTE dele tá preenchido com os valores.

O que pode ser?
Obrigado!

Ja verificou se o cache nao esta sendo salvo ? As vezes isso ocorre porque esta em cache.

Como consigo verificar isso? E verificando, como eu conseguiria limpar?

Um teste que eu fiz hoje foi criar um atributo Cliente direto no UsuárioBean.

Hoje a minha estrutura tá assim: USUARIO_BEAN.USUARIO.CLIENTE.NOME…Dessa forma não funciona.

Quando eu coloquei o atributo direto na USUARIO_BEAN, ficando USUARIO_BEAN.CLIENTE.NOME, funcionou.

O que será?

Já sei… você está utilizando o netbean 7 não é?

Nada cara, Eclipse EE =/…alguma outra sugestão?

você atualizou o seu jdk para versão 7? Ele trouxe algumas mudanças na forma de invocar classes.

Já cara, o JDK tá na 1.7 já… =/

Uma coisa que eu fiz mas que não acho certo, foi jogar na UsuárioBean um objeto Cliente.
Daí na JSP eu chamo… USUARIOBEAN_USUARIO_EMAIL pra pegar o e-mail que tá na classe usuário…e USUARIOBEAN_CLIENTE_NOME pra pegar o nome dele.

Mas queria que pegasse pelo objeto…USUARIOBEAN_USUARIO_CLIENTE_NOME…mas não consigo.

Alguma outra sugestão? Agradeço desde já o apoio.
=)

Muito provavelmente, esse seu objeto de sessão não está cadastrado como um managed-bean nas configurações do JSF.

Realmente não tinha ele como managed-bean no Faces-Config.xml…até fiquei animado pensando que pudesse ser isso, mas não deu cara.
Continua na mesma, não consegui retornar o atributo desse objeto.

Alguma outra sugestão?

Obrigado pela força.

Posta o log do erro para poder entender e verifica se cadastrou o managed-bean no escopo de sessão.

Então, como eu falei eu tenho a seguinte estrutura…USUARIOBEAN_USUARIO_CLIENTE.

No escopo da sessão eu jogo o USUARIO, tanto que eu consigo logar na aplicação normalmente, tem um trecho que mostro o e-mail do cara, que é um atributo do USUARIO, até aí beleza. O problema tá sendo quando tento retornar os dados do objeto CLIENTE, que está dentro do objeto USUARIO. Daí não funciona.

Não dá erro. Simplesmente quando eu jogo #{usuarioBean.usuario.cliente.nome} não aparece nada onde deveria aparecer o nome do caboclo.

Quando eu coloco na Classe UsuarioBean um atributo do tipo CLIENTE, ele me retorna por #{usuarioBean.cliente.nome}. Mas acho que essa não seria a solução.
Estou usando Hibernate e o relacionamento de Cliente pra Usuário é de 1-pra-1…será que tem alguma coisa a ver?

o teu MB está com qual escopo?

Então na sessão eu coloco o USUARIO.

Hoje tenho assim no Managed-Bean:

usuarioBean br.vd.bean.UsuarioBean session clienteBean br.vd.bean.ClienteBean session cliente br.vd.dominio.Cliente session

Lembrando que dentro da Classe USUARIOBEAN tem um atributo USUARIO que por sua vez tem um atributo CLIENTE. Daí chamo USUARIOBEAN_USUARIO_CLIENTE_NOME

Verifica se realmente esta sendo populado o objeto Cliente, no meu caso utilizando Hibernate com lazy funciona certinho .

     #{usuario.nome}
     #{usuario.endereco.rua}

A grande maioria das vezes utilizo ViewScoped.

Então, o objeto tá sendo populado, dps que eu jogo ele na sessão eu testo pra ver se tá com os valores.

O que é esse ViewScoped?

Minha última tentativa foi colocar no faces-config assim:

<managed-bean>
		<managed-bean-name>usuario</managed-bean-name>
		<managed-bean-class>br.vd.dominio.Usuario</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
		<managed-property>
			<property-name>cliente</property-name>
			<value>#{cliente}</value>
		</managed-property>
</managed-bean>

Mas mesmo assim não tive sucesso…=/

Alguém tem mais alguma ideia? Tô parado com isso… =/

Galera o post é antigo porem acho util, explicar os tipos de Scoped do JSF

O JSF tem scoped diferentes:

RequestScoped - escopo de requisição, os atributos serão utilizados somente na requisição, após processado zerá os valores dos atributos.
SessionScoped - escopo de sessão, os atributos são populados e se mantem enquanto a sessão estiver ativa, exemplo pratico post de formulário, onde vc posta os dados muda de págia e quando volta os dados estão setados nos campos.
ViewScoped - escopo de view, é como um sessionScoped , porem o estado é salvo e mantido somente enquanto você estiver na view, após a mudança de página(view) você perde os dados…

ApplicationScoped - Esse nunca usei :), vive pela aplicação toda.

para utilizar


@ManagedBean(name="nomeQueAcessoNaView")
@ViewScoped
class minhaClasse{
}

Sei que este tópico é velho, mas eu estou com o mesmo problema. Como resolvo isso? Alguem ja conseguiu?

Estou com o mesmo problema. Alguma sugestão? Estou utilizando eclipse, glassfish e sessionscoped, tb tentei com viewscoped mas sem sucesso.