Dúvida sobre binding e id JSF

6 respostas
W

Boa tarde a todos !

Estou com o seguinte problema: no meu MANAGEDBEAN ALUNOFACES, instanciei um objeto de outro MANAGEDBEAN (não sei se é correto?) ,chamado DisciplinaBean, quando efetuo o login eu rotorno um objeto do tipo aluno já setados com seu atributos e passo para o sete do ManagedBean disciplinaBEan:

Bean AlunoFaces

    public String efetuarLogin() throws SQLException, ClassNotFoundException {         
        if (alunoDAO.efetuarLogin(this.email, this.getSenha()) != null) {          
            this.aluno = (alunoDAO.efetuarLogin(email, senha)); 
            DisciplinaBean disciplinaBean = new DisciplinaBean();            
            disciplinaBean.setAluno(this.aluno); // nesse ponto e passado o objeto preenchido
            return "irCadastroNotas";
        } else {            
            this.setMensagem("Nome e/ou senha inválidos !");
            return "naoIrCadastroNotas";            
        }
    }

Bean DisciplinaBean

no set do disciplinaBean

  public void setAluno(Aluno aluno) { 
        JOptionPane.showMessageDialog(null, aluno.getCodigo()); // nesse ponto consigo imprimir so para um teste o codigo do aluno. 
        this.aluno = aluno;
    }


agora dentro do metodo finalizarCadastroNotas, não consigo imprimir o codigo a impressão do codigo e so para fazer um teste pois preciso do codigo que chave primaria de aluno para
gravar na tabela professores

  public String finalizarCadastroNotas() throws SQLException, ClassNotFoundException{         
        JOptionPane.showMessageDialog(null,"teste acesso classe bean discipina"+this.aluno.getCodigo()); // nesse ponto ao executar minha aplicação da nullponter execption
        professorDAO.adicionar(discipina.getProfessor());// com o codigo do aluno que chave primaria conseguiria inseri-lo ta tabela professor        
        disciplinaDAO.adicionar(discipina);        
        return "finalizaCadAluno"; 
    }

OBS.: o metodos finalzarCadastroNotas está sendo usado pelo meu bean DisciplinaBean:
<h:commandButton value=“Adicionar” action="#{disciplinaBean.finalizarCadastroNotas()}"/>

Pensei eu fazer um BINDING OU ID PARA PEGAR O CODIGO DO ALUNO QUE É CHAVE PRIMARIA E INSERIR NA TABELA PROFESSOR COMO FAÇO ISSO OU TEM UMA MELHOR
SOLUÇÃO HA FAZER???

CLASSE COMPLETA LOGO ABAIXO:

@ManagedBean
@SessionScoped
public class AlunoFaces {

    private String email;
    private String senha;
    private String mensagem;
    private Aluno aluno;
    AlunoDAO alunoDAO = new AlunoDAO();
    CursoDAO cursoDAO = new CursoDAO();

    public AlunoFaces() {  
              
    }

    public String adicionarAluno() { 
        this.mensagem = null;
        this.setAluno(new Aluno());                        
        return "adicionandoAluno";
    }

    public String finalizarAdicaoAluno() throws SQLException, ClassNotFoundException {               
        boolean insereCurso = cursoDAO.adicionar(this.getAluno().getCurso());
        boolean insereAluno = alunoDAO.adicionar(this.getAluno());          
        if (insereCurso && insereAluno) {           
            this.setMensagem("Aluno gravado com sucesso !");
            this.aluno = null;
            return "alunoAdcionado";
        }else{          
            this.setMensagem("Não foi possível gravar o aluno ! ");
            this.aluno = null;
            return "alunoAdcionado";           
        }
       
    }

    public String efetuarLogin() throws SQLException, ClassNotFoundException {         
        if (alunoDAO.efetuarLogin(this.email, this.getSenha()) != null) {          
            this.aluno = (alunoDAO.efetuarLogin(email, senha)); // retorno o objeto preenchido
            DisciplinaBean disciplinaBean = new DisciplinaBean();            
            disciplinaBean.setAluno(this.aluno); // passo o objeto para o setAluno
            return "irCadastroNotas";
        } else {            
            this.setMensagem("Nome e/ou senha inválidos !");
            return "naoIrCadastroNotas";            
        }
    }
    
    
    /**
     * @return the nome
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param nome the nome to set
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @param senha the senha to set
     */
    public void setSenha(String senha) {
        this.senha = senha;
    }

    /**
     * @return the mensagem
     */
    public String getMensagem() {
        return mensagem;
    }

    /**
     * @param mensagem the mensagem to set
     */
    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }

    /**
     * @return the aluno
     */
    public Aluno getAluno() {
        return aluno;
    }

    /**
     * @param aluno the aluno to set
     */
    public void setAluno(Aluno aluno) {
        this.aluno = aluno;
        this.aluno.setCurso(new Curso());
    }
}
--------------------------------------------------------------------------------

public class DisciplinaBean {
    
    private Aluno aluno;
    private Disciplina discipina;
    ProfessorDAO professorDAO = new ProfessorDAO();    
    DisciplinaDAO disciplinaDAO = new DisciplinaDAO();
    
    public DisciplinaBean() {
    }

    public String adicionarDisciplina(){                 
        JOptionPane.showMessageDialog(null,"Teste disciplinaBean");
        discipina = new Disciplina();
        discipina.setProfessor(new Professor());
        discipina.getProfessor().setAluno(new Aluno());       
        return "cadastroNotas";
    }
    
    public String finalizarCadastroNotas() throws SQLException, ClassNotFoundException{         
        JOptionPane.showMessageDialog(null,"teste acesso classe bean discipina" + this.aluno.getCodigo()); // nesse ponto não imprime o codigo que foi impresso no setAluno? porque?
        professorDAO.adicionar(discipina.getProfessor());        
        disciplinaDAO.adicionar(discipina);        
        return "finalizaCadAluno"; 
    }

    /**
     * @return the discipina
     */
    public Disciplina getDiscipina() {
        return discipina;
    }

    /**
     * @param discipina the discipina to set
     */
    public void setDiscipina(Disciplina discipina) {
       this.discipina = discipina;
    }

    /**
     * @return the aluno
     */
    public Aluno getAluno() {
        return aluno;
    }

    /**
     * @param aluno the aluno to set
     */
    public void setAluno(Aluno aluno) { 
        JOptionPane.showMessageDialog(null, aluno.getCodigo()); // setAluno aqui eu imprimo para fazer um teste e imprime o codigo que é chave primária
        this.aluno = aluno; // o objeto da classe disciplinaBean referencia o mesmo objeto, ambos estão preenchidos.
    }


     
}

6 Respostas

ViniGodoy

Por favor, não use apenas LETRAS MAIÚSCULAS no título de seus tópicos.

Flavio_machine

MANAGEDBEAN é um objeto gerenciado pelo JSF

Flavio_machine

Acho que não vai funcionar vc usar swing em um container

JOptionPane.showMessageDialog(null, aluno.getCodigo()); // nesse ponto consigo imprimir so para um teste o codigo do aluno.

W

Sim são gerencidos pelo JSF. O problema é que tenho que pegar o ID do aluno que ficou no cadastro anterior e setar ele no banco de dados tabela professor onde tenho um chave estrangeira de aluno, não estou conseguindo pegar o objeto preenchido “aluno” que ficou para traz no ato do preenchimento do aluno na tela de login pois na tela de login tenho um link cadastrar .

W

O JOptionPane é para fazer teste de acesso. ele não vai ficar no codigo é so para teste mesmo.

Flavio_machine

Você ta usando annotations, xml ? Pesquisa por injeção de dependencias com JSF, usa o nativo dele vai ficar bem facil .

Criado 27 de julho de 2011
Ultima resposta 27 de jul. de 2011
Respostas 6
Participantes 3