Problemas para retornar objeto de um Managed Bean com escopo de sessão

6 respostas
Victor_Almeida

E então pessoal, cá estou eu novamente com mais dúvidas.

Criei um Dao que tem a função de salvar dados em duas tabelas. O problema é que preciso recuperar os dados que foram armazenados na sessão dentro deste Dao. O que estou querendo dizer é que preciso recuperar um objeto, na verdade, um atributo deste objeto que foi armazenado ao usuário iniciar a sessão.

Quando tento retomar o objeto através desta linha de comando:

prof = (Professor) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("usuario");

Dá uma exceção de que o objeto não foi encontrado JavaNullPointException

Eis a parte do código do DAO

//método para Salvar
public void salvar(ParametroAvaliacao parametros,Avaliacao avaliacao)  throws DAOException, SQLException{ 
		
		int avaliacaoId;
		PreparedStatement ps = null;
		Connection conn = null;
		Professor prof = new Professor();
		
		//DADOS DE AVALIACAO
		
		if (avaliacao == null)
		throw new DAOException("O valor passado não pode ser nulo");
		
		try {
			
			//RECUPERANDO O OBJETO DA SESSÃO			  
			
			prof = (Professor) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("usuario");
			
			
			//INSERINDO VALORES PARA A TABELA AVALIAÇÃO
			String SQL01 = "insert into avaliacao (avaliacaoid,professorid,descricao) values (0,?,?)";
			conn = this.conn;
			ps = conn.prepareStatement(SQL01);
			ps.setInt(1, prof.getId());//NESTA LINHA DÁ ERRO DIZENDO QUE O OBJETO É NULO			  
			ps.setString(2, avaliacao.getDescricao());
			ps.executeUpdate();

SE PUDEREM ME AJUDAR

6 Respostas

Z111

Não está inserindo o objeto na sessão…

Onde vc está enviando ele para a sessão?

Victor_Almeida
Z:
Não está inserindo o objeto na sessão...

Onde vc está enviando ele para a sessão?

Quando o usuário entra na seção

package br.com.vteste.validadores;

import java.util.List;
import br.com.vteste.dao.DAOException;
import br.com.vteste.dao.UsuarioDaoLogin;
import br.com.vteste.modelos.Aluno;
import br.com.vteste.modelos.Professor;
import br.com.vteste.modelos.Usuario;


public class ControladorValidaLogin {
	
	private Usuario usuario;
	private UsuarioDaoLogin dao;
	private String paginaInicial = "";
	List<Aluno> listaAlunos;
	List<Professor> listaProfessores;
	private boolean usuarioNaoEncontrado;
	
	
	
	public ControladorValidaLogin(){
		
		usuario = new Usuario();
	}
	
	
	
	public String validarLogin(){
		
			paginaInicial = validarAluno();
			
			System.out.println(paginaInicial);			
			
			return paginaInicial;		
		}
	
	
	private String validarAluno() {
		String pagina = "";
		int i=0;
		//LISTA DE ALUNOS
		try {
			dao = new UsuarioDaoLogin();
			listaAlunos = dao.obterListaAlunos();
		} catch (DAOException e) {
			e.printStackTrace();
		}
		
				
		Aluno aluno = (Aluno) listaAlunos.get(i);
		System.out.println(this.usuario.getNome());
		
		
		if((this.usuario.getUsuario().trim().equalsIgnoreCase(aluno.getUsuario()))&&(this.usuario.getSenha().trim().equalsIgnoreCase(aluno.getSenha()))){
			
                        //AQUI O OBJETO É ENVIADO A SEÇÃO LOGO APÓS A VALIDAÇÃO DO USUÁRIO
			this.usuario = aluno;
			System.out.println("Aluno Validado!!");
			pagina = "/pages/paginasIniciais/paginaInicialAluno.jsf";	
			
		}else{
			for(i = 1; i < listaAlunos.size();i++){
				aluno = (Aluno) listaAlunos.get(i);
				if((this.usuario.getUsuario().trim().equalsIgnoreCase(aluno.getUsuario()))&&(this.usuario.getSenha().trim().equalsIgnoreCase(aluno.getSenha()))){
					
					this.usuario = aluno;
					System.out.println("Aluno Validado!!");
					pagina = "/pages/paginasIniciais/paginaInicialAluno.jsf";
					break;
				}
			}
			
		}		
		
		return pagina;						
	}
Z111

Pegue o mapa da sessão

FacesContext.getCurrentInstance().getExternalContext().getSessionMap()

e mande imprimir os valores.

Com certeza seu o “ControladorValidaLogin” está na sessão (pressupondo que está mapeado no faces-config). O mesmo não posso dizer de “Usuario” (não vi seu faces-config).

Victor_Almeida

Z:
Pegue o mapa da sessão

FacesContext.getCurrentInstance().getExternalContext().getSessionMap()

e mande imprimir os valores.

Com certeza seu o “ControladorValidaLogin” está na sessão (pressupondo que está mapeado no faces-config). O mesmo não posso dizer de “Usuario” (não vi seu faces-config).

Z,

Então no código abaixo

usuario se refere ao nome que dei ao Managed Bean quando o mapeio?

Olha o código do faces-config

<managed-bean> <managed-bean-name>validaLogin</managed-bean-name> <managed-bean-class>br.com.vteste.validadores.ControladorValidaLogin</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean>

Deveria ser,

É isso?

Z111

Deveria ser,

ControladorValidaLogin validaLogin = (ControladorValidaLogin) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("validaLogin"); prof = validaLogin.getUsuario();

É isso?[/quote]

Victor_Almeida

Z:
Deveria ser,

ControladorValidaLogin validaLogin = (ControladorValidaLogin) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("validaLogin"); prof = validaLogin.getUsuario();

É isso?

[/quote]

Valeu Z,

Finalmente deu certo e está rodando.

Falow cara

Criado 27 de julho de 2010
Ultima resposta 31 de jul. de 2010
Respostas 6
Participantes 2