Ajuda por favor

5 respostas
G

Boa noite pessoal preciso de ajuda com a segunte pilha de erro.

Description: An unhandled exception occurred during the execution of the web application. Please review the following stack trace for more information regarding the error.

Exception Details: org.apache.jasper.el.JspPropertyNotFoundException
/edicaoFuncionario.jsp(21,24) ‘#{FuncionarioBean.funcionario.nome}’ Target Unreachable, ‘funcionario’ returned null

Possible Source of Error:
Class Name: org.apache.jasper.el.JspValueExpression
File Name: JspValueExpression.java
Method Name: getType
Line Number: 61

Source not available. Information regarding the location of the exception can be identified using the exception stack trace below.

Stack Trace:

org.apache.jasper.el.JspValueExpression.getType(JspValueExpression.java:61)

com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:81)

javax.faces.component.UIInput.getConvertedValue(UIInput.java:934)

javax.faces.component.UIInput.validate(UIInput.java:860)

javax.faces.component.UIInput.executeValidate(UIInput.java:1065)

javax.faces.component.UIInput.processValidators(UIInput.java:666)

javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1033)

javax.faces.component.UIForm.processValidators(UIForm.java:229)

javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1033)

javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:662)

com.sun.faces.extensions.avatar.components.PartialTraversalViewRootImpl.processValidators(PartialTraversalViewRootImpl.java:153)

com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100)

com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)

com.sun.faces.extensions.avatar.lifecycle.PartialTraversalLifecycle.execute(PartialTraversalLifecycle.java:94)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)

org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

com.sun.webui.jsf.util.UploadFilter.doFilter(UploadFilter.java:267)

org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)

org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)

org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)

org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)

java.lang.Thread.run(Thread.java:619)

5 Respostas

A

Teria sido interessante se vc tivesse postado o codigo para analise.

De qualquer forma, acredito que voce nao instanciou no seu managed bean a classe Funcionario.

public class FuncionarioBean {
  private Funcionario funcionario; //acredito que o problema esteja aqui pelo fato de voce nao ter instanciado...

  //setters e getters
}
G

Boa tarde muito obrigado amigo pela ajuda, vai o codigo o FuncionarioBean, levando em conta tambem que o objeto funcionario
eu crio ele por herança das classes pessoa que por sua vez tem outra classe pessoafisica que estende pessoa que tambem por sua
vez tem a classe funcinario que estente pessoafisica. Segue abaixo o codigo das mesmas.
Grato desde Ja
Abraço…
ex.:

package dto;

import java.io.Serializable;

public class DTOPessoa implements Serializable {
    protected int id;
    protected String nome;
    protected String telefone;
    protected String email;

    public DTOPessoa(){}

    public DTOPessoa(Integer id, String nome, String telefone,String email){
         this.id = id;
         this.nome = nome;
         this.telefone= telefone;
         this.email = email;
    }

     metodos gets e seters....
}
package dto;

public class DTOPessoaFisica extends DTOPessoa {

    protected String cpf;
    protected String rg;

    public DTOPessoaFisica() {
    }

    public DTOPessoaFisica(String nome, String telefone, String email, String cpf, String rg) {
        // super(id,nome,telefone,email);
        //   super.id=id;
        super.nome = nome;
        super.telefone = telefone;
        super.email = email;
        this.cpf = cpf;
        this.rg = rg;
    }

     metodos gets e seters...

}
package dto;

public class DTOFuncionario extends DTOPessoaFisica {
    private Integer idFuncionario;
    private String endereco;
    private String senha;
    private boolean administrador;
    private Integer idPessoaFisica ;

    public DTOFuncionario(){}

    public DTOFuncionario(String nome,String telefone,String email,String rg,String cpf,
            String endereco, String senha,boolean administrador,Integer idPessoaFisica){

          super.nome = nome;
          super.telefone = telefone;
          super.email = email;
          super.rg = rg;
          super.cpf = cpf;
          this.endereco = endereco;
          this.senha = senha;
          this.administrador = administrador;
          this.idPessoaFisica = idPessoaFisica;

    }
   
      metodos gets e seteres......
    
}
package managedbeans;

import dao.DAOFuncionario;
import dto.DTOFuncionario;
import java.util.List;

public class FuncionarioBean{

    private DTOFuncionario funcionario;
    private DAOFuncionario funcionarios;
    private boolean erro = false;
    private boolean edicao;
    private String nome;
    private List<DTOFuncionario> listaFuncionarios;

    public FuncionarioBean() {
        funcionarios = new DAOFuncionario();
    }

    public DTOFuncionario getFuncionario() {
        return funcionario;
    }

    public void setFuncionario(DTOFuncionario funcionario) {
        this.funcionario = funcionario;
    }

    public boolean getErro() {
        return erro;
    }

    public void setErro(boolean erro) {
        this.erro = erro;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public List<DTOFuncionario> getFuncionarios() {
        return listaFuncionarios;
    }

    public void setListaFuncionarios(List<DTOFuncionario> funcionarios) {
        this.listaFuncionarios = funcionarios;
    }
    public boolean isEdicao() {
        return edicao;
    }
    public void setEdicao(boolean edicao) {
        this.edicao = edicao;
    }

    private String prepararEdicao(boolean edicao) {
        setEdicao(edicao);
        return "edicaoFuncionario";
    }

    public String insercaoFuncionario() {

        funcionario = new DTOFuncionario();
        return prepararEdicao(false);
    }


    public String edicaoFuncionario() {
        return prepararEdicao(true);

    }

    public String pesquisaFuncionario() {
         listaFuncionarios = funcionarios.pesquisar(nome);
        return "pesquisaFuncionario";

    }

    public String pesquisarFuncionarios() {
        listaFuncionarios = funcionarios.pesquisar(nome);
        return "";
    }

    public String inserirFuncionario() {
        funcionarios.inserir(funcionario);
        edicao = false;
        return "";
    }

    public String editarFuncionarios() {
        funcionarios.alterar(funcionario);

        for (int i = 0; i < listaFuncionarios.size(); i++) {
            DTOFuncionario f = listaFuncionarios.get(i);
            if (f.getId() == funcionario.getId()) {
                listaFuncionarios.set(i, funcionario);
                break;
            }
        }

        return "";
    }

    public String excluirFuncionario() {

        funcionarios.excluir(funcionario);

        for (int i = 0; i < listaFuncionarios.size(); i++) {
            DTOFuncionario f = listaFuncionarios.get(i);
            if (f.getId() == funcionario.getId()) {
                listaFuncionarios.remove(i);
                break;
            }
        }

        return "";
    }

    public String inicial() {
        return "inicial";
    }
}
A

Gaucho_Bage,

Nao entendi o que vc quis dizer com

Uma coisa eh vc montar a hierarquia de classe atraves de heranca. Outra eh vc instanciar a classe propriamente dita, independente se ela herda de alguem ou nao.

O que eu havia dito, ainda reforco que precisa ser aplicado. Pelo codigo, vejo que vc nao instanciou funcionario, presente como atributo no seu managed Bean. A unica classe que vejo instanciada eh funcionarios e nao funcionario atraves do construtor do managed bean.

Observe novamente o erro:

G

Boa tarde Alex, muito obrigado, não tinha criado o objeto funcionario ainda tinha que instanciar a classe, quanto a hierarquia das classes, coloquei
por que achei que tivesse algum problema, e para poder entendar mais claramente o problema aqui…

Cara se não for encomodo. Estu criando as classes dao manualmente como:
ex.:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import conexao.Conexao;
import java.sql.*;
import java.util.*;
import conexao.Conexao.*;
import dto.DTOFuncionario;

/**
 *
 * @author Bruno
 */
public class DAOFuncionario {

    private Connection con;

    public DAOFuncionario() {
        con = Conexao.getInstancia().criarConexao();
    }

    /*
     *Metodo que Efetua o Login do usuario no sistema
     */
    public DTOFuncionario efetuarLogin(DTOFuncionario f) {

        String sql = " SELECT funcionario.idFuncionario,pessoa.nome,pessoa.email,funcionario.senha," +
                " funcionario.administrador,funcionario.Pessoa_Fisica_Pessoa_idPessoa " +
                " from pessoa,funcionario where " +
                " pessoa.idPessoa = funcionario.Pessoa_Fisica_Pessoa_idPessoa " +
                " and pessoa.email=? " +
                " and funcionario.senha=? ";
        try {
            PreparedStatement smtp = con.prepareStatement(sql);

            //  smtp.setBoolean(1,f.isAdministrador());
            smtp.setString(1, f.getEmail());
            smtp.setString(2, f.getSenha());
            ResultSet rs = smtp.executeQuery();

            while (rs.next()) {

                f.setId(rs.getInt(1));
                f.setIdFuncionario(rs.getInt(1));
                f.setNome(rs.getString(2));
                f.setEmail(rs.getString(3));
                f.setAdministrador(rs.getBoolean(5));


            }
        } catch (SQLException sqle) {
            sqle.printStackTrace();
        }
        return f;

    }

    /*
     * Metodo que pesquisa os usuario nos banco de dados
     * pesquisa pelo nome ou todos
     */
    public List<DTOFuncionario> pesquisar(String nome) {
        List<DTOFuncionario> funcionarios = new ArrayList<DTOFuncionario>();

        String sql = " SELECT pessoa.*,funcionario.*,pessoa_fisica.* from pessoa,pessoa_fisica,funcionario " +
                " where pessoa.idPessoa = pessoa_fisica.Pessoa_idPessoa " +
                " and funcionario.Pessoa_Fisica_Pessoa_idPessoa = pessoa_fisica.Pessoa_idPessoa " +
                " and UPPER(pessoa.nome) LIKE '%" + nome + "%'";
        try {
            PreparedStatement smtp = con.prepareStatement(sql);
            ResultSet rs = smtp.executeQuery();
            while (rs.next()) {

                // a linha abaixo tem observar o processo
                DTOFuncionario f = new DTOFuncionario();
                f.setId(rs.getInt(1));
                f.setNome(rs.getString(2));
                f.setTelefone(rs.getString(3));
                f.setEmail(rs.getString(4));
                f.setCpf(rs.getString(11));
                f.setRg(rs.getString(12));
                f.setEndereco(rs.getString(6));
                f.setAdministrador(rs.getBoolean(8));

                funcionarios.add(f);

            }

        } catch (SQLException sqle) {
            sqle.printStackTrace();
        }
        return funcionarios;
    }

    /*
     * Metodo para inserir funcionario no banco
     */
    public void inserir(DTOFuncionario funcionario) {
        funcionario = new DTOFuncionario();

        String sql = " INSERT INTO pessoa(nome,telefone,email) VALUE (?,?,?);" +
                " INSERT INTO pessoa_fisica(Pessoa_idPessoa,cpf,rg) " +
                " VALUE ((SELECT MAX(pessoa.idPessoa) from pessoa),?,?); " +
                " INSERT INTO funcionario(endereco,senha,administrador,Pessoa_Fisica_Pessoa_idPessoa) " +
                " VALUE (?,?,?,(SELECT MAX(pessoa.idPessoa) from pessoa)); ";

        try {
            PreparedStatement ps = con.prepareStatement(sql);
            ps.setString(1, funcionario.getNome());
            ps.setString(2, funcionario.getTelefone());
            ps.setString(3, funcionario.getEmail());

            ps.setString(4, funcionario.getCpf());
            ps.setString(5, funcionario.getRg());
       
            ps.setString(6, funcionario.getEndereco());
            ps.setString(7, funcionario.getSenha());
            ps.setBoolean(8, funcionario.isAdministrador());

            ps.executeUpdate();
            limpar_campos(funcionario);


        } catch (SQLException sqle) {
            sqle.printStackTrace();
        }
    }

    public void alterar(DTOFuncionario funcionario) {
        String sql = "UPDATE `pessoa`  SET `nome` = ?,`telefone` = ?,`email` = ?" +
                "WHERE  `idPessoa` = ?;" +
                "UPDATE `pessoa_fisica`  SET `cpf` = ?,`rg` = ?" +
                "WHERE `Pessoa_idPessoa` = ?;" +
                "UPDATE `funcionario`  SET `endereco` = ?,`senha` = ?," +
                "`administrador` = ?" +
                "WHERE `Pessoa_Fisica_Pessoa_idPessoa` = ?;";
        try {
            PreparedStatement ps = con.prepareCall(sql);

            ps.setString(1, funcionario.getNome());
            ps.setString(2, funcionario.getTelefone());
            ps.setString(3, funcionario.getEmail());
            ps.setInt(4, funcionario.getId());

            ps.setString(5, funcionario.getCpf());
            ps.setString(6, funcionario.getRg());
            ps.setInt(7, funcionario.getId());

            ps.setString(8, funcionario.getEndereco());
            ps.setString(9, funcionario.getSenha());
            ps.setBoolean(10, funcionario.isAdministrador());
            ps.setInt(11, funcionario.getId());
            ps.executeUpdate();
            limpar_campos(funcionario);


        } catch (SQLException sqle) {
            sqle.printStackTrace();
        }
    }

    public void excluir(DTOFuncionario f) {
        String sql = "DELETE FROM `pessoa` " +
                "WHERE `idPessoa` = ? ;" +
                "DELETE FROM `pessoa_fisica` " +
                "WHERE `pessoa_fisica`.`Pessoa_idPessoa` = ?;" +
                "DELETE FROM `funcionario` " +
                "WHERE `funcionario`.`Pessoa_Fisica_Pessoa_idPessoa` =?;";
        try {

            PreparedStatement ps = con.prepareCall(sql);
            ps.setInt(1, f.getId());
            ps.setInt(2, f.getId());
            ps.setInt(3, f.getId());
            ps.executeUpdate();
            limpar_campos(f);

        } catch (SQLException e) {
            e.printStackTrace();

        }
    }

    public void limpar_campos(DTOFuncionario func) {
        func.setNome(null);
        func.setTelefone(null);
        func.setEmail(null);
        func.setCpf(null);
        func.setRg(null);
        func.setEndereco(null);
        func.setSenha(null);
        func.setAdministrador(false);


    }
}

No metodo inserir passo a sql, mas os parametros indo todos null,por que sera ? Estava pensando em contruir estas classes utilizando o framework hibernate
e criar toda regra de nogocio dentro da aplicação…
Oque vo aconselha.
Muito Obrigado
Abraço

A

Gaucho_Bage,

Caso seja uma opção voce trabalhar com algum framework ORM como Hibernate, eu aconselharia sim o seu uso. Com ele, os esforços no desenvolvimento desta camada reduziria muuuito. Hibernate encontra-se bastante estável e possui uma comunidade bastante ativa tambem.

Digo mais, você poderia investir um tempinho para considerar o uso de EJB 3.0, caso ainda não o use. EJB é uma tecnologia bastante utilizada em projetos médio e de grande porte onde irá agregar tb bastante facilidade no seu dia a dia quando tiver que trabalhar com serviços como mensageria, transação automatica, seguranca, etc…

Outra opção, seria fazer uso do Spring que é um framework concorrente acirrado do EJB e tem uma aceitação muito grande no mercado. A vantagem do Spring para o EJB estaria na forma como o mesmo resolve questões que o EJB faria, sem criar um forte acoplamento com APIs proprietárias e principalmente, sem necessitar de um EJB Container. Seus uso é bastante simples também e flexível.

Qual dos dois iria escolher, vai muito do gosto. Os dois são ÓTIMOS e com certeza resolveria todos os seus problemas!!!

Criado 2 de maio de 2010
Ultima resposta 3 de mai. de 2010
Respostas 5
Participantes 2