JSF - Campos aparecem em branco

6 respostas
F

Olá, pessoal. Sou novo por aqui. Estou estudando JSF e estou tendo dificuldades.

Tenho um sistema básico onde após fazer o login, é possível atualizar os dados do usuário logado.
Só que estou tentando abrir a tela de edição de dados com os dados atuais do usuário pré-carregados nos campos, mas os valores destes campos não estão sendo exibidos, embora estejam sendo carregados na minha bean.
Segue a minha bean:

public class AtualizaDadosBean {
	protected Usuario usuario;
	
	public AtualizaDadosBean() {
		
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public String carregaDadosTela() {
		try {
			//Busca na sessão o usuário logado
			FacesContext context = FacesContext.getCurrentInstance();  
			HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
			if (session.getAttribute("usuario") != null) {
				usuario = (Usuario) session.getAttribute("usuario");
			}
			
			return "success";
		} catch (Exception e) {
			e.printStackTrace();
			return "fail";
		}
	}
}

Ao fazer login, eu jogo na sessão uma instância de Usuário contendo todos os dados do usuário.
Daí no método carregaDadosTela() eu pego da sessão esta instância e atribuo ao atributo “usuario”.
O meu objeto Usuario contém os métodos get e set dos atributos.
Na minha página, busco os valores dos campos da seguinte forma:

<h:inputText id="nome" value="#{atualizaDadosBean.usuario.nome}"/>

Não sei se pode ser algo errado no mapeamento no meu faces-config.xml. Segue parte do conteúdo do meu faces-config.xml:

<faces-config>
	<managed-bean>
		<managed-bean-name>atualizaDadosBean</managed-bean-name>
		<managed-bean-class>beans.AtualizaDadosBean</managed-bean-class>
		<managed-bean-scope>request</managed-bean-scope>
	</managed-bean>
	
	<navigation-rule>
		<from-view-id>*</from-view-id>
		<navigation-case>
			<from-action>#{atualizaDadosBean.carregaDadosTela}</from-action>
			<from-outcome>success</from-outcome>
			<to-view-id>/pages/atualizar.jsp</to-view-id>
			<redirect/>
		</navigation-case>
	</navigation-rule>
</faces-config>

Conforme dito, a tela de edição de dados aparece, mas os campos estão todos em branco quando na verdade deveriam aparecer carregados…
Alguém poderia me dar uma ajuda?

Muito obrigado de antemão.

6 Respostas

aeciovc

if (session.getAttribute("usuario") != null) { usuario = (Usuario) session.getAttribute("usuario"); }

vc debugou e viu que ele entra ai mesmo??

F

Entra sim…

nellson.maia

E o objeto esta populado, tem valores setados? Depois que entra nesse If…

F

Sim sim… Todos os atributos do objeto Usuário estão populados depois de passar pelo if.

F

Boa tarde Felipe,

Sugiro que você tente fazer algo da seguinte maneira:
Crie um ManagedBean para armazenar o usuário logado e registre esse MB como um MB de seção. Jogar um objeto na Seção através do contexto também funciona porém não é a maneira mais indicada.
Você tendo um MB na seção ficará muito mais facil de você acessar essas informações de qualquer lugar do sistema.

Ex:

/* Entidade usuário */
public class Usuario {

	private String nome;
	
	private Integer idade;
	
	/* Sets e Gets */

}
/* Classe que armazena o usuário logado */
public class UsuarioLogadoMB {

	private Usuario usuario = new Usuario();
	
	/* Set e Get */

}
/* Faces Config */
<managed-bean>  
 <managed-bean-name>usuarioLogadoMB</managed-bean-name>  
 <managed-bean-class>UsuarioLogadoMB</managed-bean-class>  
 <managed-bean-scope>session</managed-bean-scope>  
</managed-bean>
//Pagina
<h:inputText id="nome" value="#{usuarioLogadoMB.usuario.nome}"/>

Espero ter ajudado.

Atenciosamente,

Fábio Barboza de Oliveira

F

Feitooo! Alterei o escopo da minha atualizaDadosBean para session e funcionou!

<managed-bean>  
     <managed-bean-name>atualizaDadosBean</managed-bean-name>  
     <managed-bean-class>beans.AtualizaDadosBean</managed-bean-class>  
     <managed-bean-scope>session</managed-bean-scope>  
</managed-bean>

Obrigado pela ajuda, Fabio!

Criado 5 de maio de 2010
Ultima resposta 5 de mai. de 2010
Respostas 6
Participantes 4