Problemas com JSF : o arquivo JSP não reconhece a variável lista funcionarios

Boa noite,pessoal!
Sou novato na utilização do JSF e tenho o seguinte problema:
Estou fazendo uma aplicação JSF que exibe o cadastro de funcionarios. Mas na hora de passar os registros do funcionario para um dataTable, o arquivo jsp simplesmente não reconhece a variável funcionarios, do tipo Lista, criada no managedbean. E quando executo a aplicação, o Tomcat retorna o seguinte erro:

[i]type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: /Funcionario.jsp(21,12) ‘#{FuncionarioFaces.funcionarios}’ Property ‘funcionarios’ not found on type desempenho.managedbeans.FuncionarioFaces
javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

root cause

org.apache.jasper.el.JspPropertyNotFoundException: /Funcionario.jsp(21,12) ‘#{FuncionarioFaces.funcionario}’ Property ‘funcionario’ not found on type desempenho.managedbeans.FuncionarioFaces
org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:104)
javax.faces.component.UIData.getValue(UIData.java:582)
javax.faces.component.UIData.getDataModel(UIData.java:1063)
javax.faces.component.UIData.setRowIndex(UIData.java:417)
com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:85)
javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:788)
javax.faces.component.UIData.encodeBegin(UIData.java:879)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:884)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:245)
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:176)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.[/i]

Segue o código Funcionario.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Funcionário</title>
    </head>
    <body>
        <f:view>
            <h1><h:outputText value="Funcionários"/></h1>
            <h:dataTable border="1" var="item" value="#{FuncionarioFaces.funcionarios}">
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Código"/>
                    </f:facet>
                    <h:outputText value="#{item.CodFun}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Nome"/>
                    </f:facet>
                    <h:outputText value="#{item.NomFun}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Data Nascimento"/>
                    </f:facet>
                    <h:outputText value="#{item.DatNasFun}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Telefone"/>
                    </f:facet>
                    <h:outputText value="#{item.TelFun}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Sexo"/>
                    </f:facet>
                    <h:outputText value="#{item.SexFun}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="CTPS"/>
                    </f:facet>
                    <h:outputText value="#{item.NumCTPSFun}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="INSS"/>
                    </f:facet>
                    <h:outputText value="#{item.NumINSSFun}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="CPF"/>
                    </f:facet>
                    <h:outputText value="#{item.CPFFun}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="E-mail"/>
                    </f:facet>
                    <h:outputText value="#{item.EMailFun}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Data Contratação"/>
                    </f:facet>
                    <h:outputText value="#{item.DatConFun}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Código Departamento"/>
                    </f:facet>
                    <h:outputText value="#{item.CodDepFun}"/>
                </h:column>
            </h:dataTable>
        </f:view>
    </body>
</html>

E segue o codigo do managedbeans FuncionarioFaces.java

package desempenho.managedbeans;

import desempenho.dao.FuncionarioDAO;
import desempenho.db.Funcionario;
import java.sql.SQLException;
import java.util.List;

public class FuncionarioFaces {

    private static final long serialVersionUID = 1L;

    private FuncionarioDAO FunDAO = new FuncionarioDAO();
    private Funcionario selectedFuncionario;
    private List<Funcionario> funcionarios;

    public FuncionarioFaces(){}

    public String InicioInsereProduto(){
        selectedFuncionario = new Funcionario();
        return "NovoFuncionario";
    }

    public String FimInsereProduto() throws ClassNotFoundException, SQLException{
        FunDAO.InserirFuncionario(selectedFuncionario);
        //Limpa a variavel de cache
        funcionarios = null;
        return "ListaFuncionario";
    }

    public List<Funcionario> BuscaTodosFuncionarios() throws ClassNotFoundException, SQLException{
        if(funcionarios == null){
            funcionarios = FunDAO.ExibeFuncionarios();
        }
        return funcionarios;
    }

    public String InicioEditaFuncionario(){
        return "ModificaFuncionario";
    }

    public String FimEditaFuncionario() throws ClassNotFoundException, SQLException{
        FunDAO.AlterarFuncionario(selectedFuncionario);
        //Limpa a variavel de cache
        funcionarios = null;
        return "ListaFuncionario";
    }

    public String RemoveFuncionario() throws ClassNotFoundException, SQLException{
        FunDAO.ExcluirFuncionario(selectedFuncionario);
        //Limpa a variavel de cache
        funcionarios = null;
        return "ListaFuncionario";         
    }

    public Funcionario getSelectedFuncionario() {
        return selectedFuncionario;
    }

    public void setSelectedFuncionario(Funcionario selectedFuncionario) {
        this.selectedFuncionario = selectedFuncionario;
    }

}

Preciso de uma solução urgente para esse problema…
Desde já, agradeço.

Esta faltando o get e set do List “funcionarios”.

Bom, cara, adicionei os metodos set e get. Resolveu esse erro, mas apareceu outro: o jsp não reconhece as variaveis da classe Funcionario. Segue o novo erro:


javax.servlet.ServletException: /Funcionario.jsp(22,26) ‘#{item.CodFun}’ Property ‘CodFun’ not found on type desempenho.db.Funcionario
javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

Sendo que no arquivo db.Funcionario, existe a variável, juntamente com os métodos get e set. Se eu retirar CodFun do código, ele retorna o mesmo erro na proxima variável. O que pode ser?

Segue db.Funcionario

package desempenho.db;

    import java.sql.Date;

public class Funcionario implements java.io.Serializable {
    private static final long serialVersionUID = 1L;
    private int CodFun;
    private String NomFun;
    private Date DatNasFun;
    private String TelFun;
    private String SexFun;
    private String NumCTPSFun;
    private String NumINSSFun;
    private String CPFFun;
    private String EMailFun;
    private Date DatConFun;
    private Departamento Dep;

    public Funcionario(){

    }

    public int getCodFun() {
        return CodFun;
    }

    public void setCodFun(int CodFun) {
        this.CodFun = CodFun;
    }

    public String getCPFFun() {
        return CPFFun;
    }

    public void setCPFFun(String CPFFun) {
        this.CPFFun = CPFFun;
    }

    public Date getDatConFun() {
        return DatConFun;
    }

    public void setDatConFun(Date DatConFun) {
        this.DatConFun = DatConFun;
    }

    public Date getDatNasFun() {
        return DatNasFun;
    }

    public void setDatNasFun(Date DatNasFun) {
        this.DatNasFun = DatNasFun;
    }

    public String getEMailFun() {
        return EMailFun;
    }

    public void setEMailFun(String EMailFun) {
        this.EMailFun = EMailFun;
    }

    public String getNomFun() {
        return NomFun;
    }

    public void setNomFun(String NomFun) {
        this.NomFun = NomFun;
    }

    public String getNumCTPSFun() {
        return NumCTPSFun;
    }

    public void setNumCTPSFun(String NumCTPSFun) {
        this.NumCTPSFun = NumCTPSFun;
    }

    public String getNumINSSFun() {
        return NumINSSFun;
    }

    public void setNumINSSFun(String NumINSSFun) {
        this.NumINSSFun = NumINSSFun;
    }

    public String getSexFun() {
        return SexFun;
    }

    public void setSexFun(String SexFun) {
        this.SexFun = SexFun;
    }

    public String getTelFun() {
        return TelFun;
    }

    public void setTelFun(String TelFun) {
        this.TelFun = TelFun;
    }

    public Departamento getDep() {
        return Dep;
    }

    public void setDep(Departamento Dep) {
        this.Dep = Dep;
    }

}

Agradeço ao pessoal, pela atenção e pela POUCA contribuição q foi dada. O meu problema não foi resolvido e ainda levei bomba na matéria por causa deste trabalho. Agora eu também não quero saber em resolver esse problema mais não. Obrigado!

Tudo bem… ninguém vai lhe ajudar mais mesmo…

Game Over

Se eu fosse você procurava a solução.

Abraço