Versão atual:

Erro ao listar dados no datatable

Eu tenho um objeto Endereco dentro de da minha classe Pessoa e a minha classe Funcionario herda de Pessoa. Porém, quando vou listar todos os funcionarios no datatable aparece esse seguinte erro:

/crudFuncionario.xhtml @219,103 value="#{FuncionarioBean.endereco.cep}": Property 'endereco' not found on type managedbean.FuncionarioMB

Eu tenho que instanciar minha classe Endereco também no bean? Mas ela não é uma herança de Pessoa pra funcionario, deveria estar certo. Segue o código abaixo:

XHTML

<h:form id="formTabelaFuncionario">
                    <p:dataTable id="tabelaFuncionario"
                                 var="f" 
                                 value="#{FuncionarioBean.funcionarios}"
                                 emptyMessage="Nenhum registro encontrado..."
                                 widgetVar="funcionarioTable"
                                 rowKey="#{f.id}"
                                 rows="10"
                                 paginator="true"                                 
                                 rowsPerPageTemplate="5,10,15"
                                 >                      


                        <p:column headerText="Nome">
                            <h:outputText value="#{f.nome}" />

                        </p:column>
                        <p:column headerText="Telefone">
                            <h:outputText value="#{f.telefone}" />

                        </p:column>
                        <p:column headerText="CPF">
                            <h:outputText value="#{f.cpf}" />

                        </p:column>
                        <p:column headerText="CTPS">
                            <h:outputText value="#{f.ctps}" />

                        </p:column>
                        <p:column headerText="CEP" style="display: none">
                            <h:outputText value="#{f.endereco.cep}" />

                        </p:column>
                        <p:column headerText="Logradouro" style="display: none">
                            <h:outputText value="#{f.endereco.logradouro}"/>

                        </p:column>
                        <p:column headerText="Nº" style="display: none">
                            <h:outputText value="#{f.endereco.numero}"/>

                        </p:column>
                        <p:column headerText="Complemento" style="display: none">
                            <h:outputText value="#{f.endereco.complemento}"/>

                        </p:column>
                        <p:column headerText="Bairro" style="display: none">
                            <h:outputText value="#{f.endereco.bairro}" />

                        </p:column>
                        <p:column headerText="Cidade" style="display: none">
                            <h:outputText value="#{f.endereco.cidade}"/>

                        </p:column>
                        <p:column headerText="Estado" style="display: none">
                            <h:outputLabel value="#{f.endereco.uf}"/>                     
                        </p:column>

                        <p:column headerText="Detalhes" style=" width: 100px">
                            <p:commandButton value="" image="ui-icon-search" title="Detalhes"
                                             onclick=""
                                             update=""
                                             >

                                <f:setPropertyActionListener target="" value="" />
                            </p:commandButton> 
                        </p:column>
                        </p:dataTable>

                </h:form>

MB

@ViewScoped
@ManagedBean(name ="FuncionarioBean")
public class FuncionarioMB implements Serializable{    


    private Funcionario funcionario;
    private FuncionarioDAO funcionarioDAO;
    private List<Funcionario> funcionarios = null;
    private boolean addNewReg;
    private boolean mensagemErro;    

    public FuncionarioMB() throws Exception {        
        this.mensagemErro = false;
        this.funcionarioDAO = new FuncionarioDAO();
        atualizaConsulta();
    }    

    public int totalFuncionario() throws SQLException{
        return funcionarios.size();
    }

    public Funcionario getFuncionario() {
        return funcionario;
    }

    public void setFuncionario(Funcionario funcionario) {
        refresh();         
        this.mensagemErro = false;

        if (funcionario == null){
            this.funcionario = new Funcionario();            
        }else{        
            this.funcionario = funcionario;
        }   
    }

    public List<Funcionario> getFuncionarios() {
        if ( funcionarios == null) {
            funcionarios = funcionarioDAO.consultarDAO();               
        }
        return funcionarios;
    }

    public void setFuncionarios(List<Funcionario> funcionarios) {
        this.funcionarios = funcionarios;
    }

    public boolean isAddNewReg() {
        return addNewReg;
    }

    public void setAddNewReg(boolean addNewReg) {
        this.addNewReg = addNewReg;
    }

    public boolean isMensagemErro() {
        return mensagemErro;
    }

    public void setMensagemErro(boolean mensagemErro) {
        this.mensagemErro = mensagemErro;
    }

    //------------------ método para salvar (cadastrar, editar) ------------------
    public void salvar(ActionEvent Evento)throws SQLException, Exception{        
        try{   
            if (addNewReg){   
                if (!this.funcionarioDAO.cadastrarDAO(this.funcionario)){
                    this.mensagemErro = true;
                }
            }else{
                if (!this.funcionarioDAO.editarDAO(this.funcionario)){
                    this.mensagemErro = true;
                }
            }        
        }finally{
            atualizaConsulta();
        }
    }

    private void atualizaConsulta() throws SQLException, Exception{
        funcionarios = this.funcionarioDAO.consultarDAO();
    }

    //------------------ método para excluir ------------------
    public void excluir(ActionEvent Evento) throws SQLException, Exception{
        try{
            if (!this.funcionarioDAO.excluirDAO(this.funcionario)){
                this.mensagemErro = true;
            }
        }finally{
            atualizaConsulta();
        }
    }

    public void refresh() 
    {
        FacesContext context = FacesContext.getCurrentInstance();
        Application application = context.getApplication();
        ViewHandler viewHandler = application.getViewHandler();
        UIViewRoot viewRoot = viewHandler.createView(context, context.getViewRoot().getViewId());
        context.setViewRoot(viewRoot);
        context.renderResponse(); //Optional
    }

}

DAO

 public List consultarDAO(){
        Funcionario funcionario = null;
        Endereco endereco = null;
        con = Config.abrirConexao();
        String sql = "SELECT * FROM funcionario ORDER BY id_funcionario DESC";
        PreparedStatement stmt = null;   

        try {
            stmt = con.prepareStatement(sql);        
            ResultSet rs = stmt.executeQuery();
            while (rs.next()) {
                funcionario = new Funcionario();
                funcionario.setId(rs.getInt("id_funcionario"));
                funcionario.setNome(rs.getString("nome_funcionario"));
                funcionario.setTelefone(rs.getString("telefone_funcionario"));
                funcionario.setCpf(rs.getString("cpf_funcionario"));
                funcionario.setCtps(rs.getString("ctps_funcionario"));
                funcionario.getEndereco().setCep(rs.getString("cep_funcionario"));
                funcionario.getEndereco().setLogradouro(rs.getString("logradouro_funcionario"));
                funcionario.getEndereco().setNumero(rs.getString("numero_funcionario"));
                funcionario.getEndereco().setComplemento(rs.getString("complemento_funcionario"));
                funcionario.getEndereco().setBairro(rs.getString("bairro_funcionario"));
                funcionario.getEndereco().setCidade(rs.getString("cidade_funcionario"));
                funcionario.getEndereco().setUf(rs.getString("uf_funcionario"));                        

                funcionarios.add(funcionario);                
            }

            } catch (SQLException ex) {
//            Logger.getLogger(FuncionarioDAO.class.getName()).log(Level.SEVERE, null, ex);
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro SQLException: " + ex.getMessage(), "");  
                FacesContext.getCurrentInstance().addMessage(null, message);  
                funcionario = null;
                endereco = null;
       } finally {
            try {
                stmt.close();
                con.close();
            } catch (SQLException ex) {
                Logger.getLogger(FuncionarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
        return funcionarios;
    }

Versão(1):

Ver a versão formatada

Erro ao listar dados no datatable

Comentário

new question