Problema com commandLink JSF

Pessoal ,tenho o seguinte command link do JSF

<h:commandLink title="Voltar"   
                     action="#{clienteMB.voltar}"   
                     style="margin-left:20px">   
          <h:graphicImage url="/imagens/voltar.jpg"   
                          style="border:0"/>   
  
      </h:commandLink>  

Metodo Voltar do MB

public void voltar() {   
    System.out.println("entroo");   
    HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();   
    try {   
        response.sendRedirect("menu.xhtml");   
    } catch (IOException ex) {   
       JSFUtil.enviarMenssagemErro("Erro ao voltar");   
    }   
}  

OU

public void voltar() {   
    return "menu.xhtml"
}  

Nenhum funciona

quando acionado o commadlink ele da um nullpointer na pagina,ele NÃO ENTRA no metodo voltar…o tomcat nem exibe o erro no console ,alguem sabe o porque?

abaixo tem o codigo fonte inteiro mais melhor entendimento.

<?xml version="1.0" encoding="ISO-8859-1" ?>   
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
<html xmlns="http://www.w3.org/1999/xhtml"   
      xmlns:h="http://java.sun.com/jsf/html"   
      xmlns:p="http://primefaces.prime.com.tr/ui"   
      xmlns:f="http://java.sun.com/jsf/core"   
      xmlns:ui="http://java.sun.com/jsf/facelets">   
    <h:head>   
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />   
        <title>Cadastro de Cliente</title>   
        <script type="text/javascript">   
            function validarApagar(xhr, status, args){   
                var isClienteSelecionado = args.isClienteSelecionado;   
                if(isClienteSelecionado){   
                   dlgExclui.show();   
                }   
            }   
              function validarAlterar(xhr, status, args){   
                var alterou = args.alterou;   
                    if(alterou) {   
                        dlgCliente.hide();   
                }   
            }   
        </script>   
    </h:head>   
  
    <f:view locale="pt_br">   
        <h:body>   
            <h:form>   
                <p:toolbar>   
                    <p:toolbarGroup align="left">   
                        <p:menuButton value="Cadastro"   
                                      rendered="#{menuMB.administrator or menuMB.simples}">   
                            <p:menuitem value="Usuários"   
                                        action="#{menuMB.irUsuario}"   
                                        ajax="false"   
                                        rendered="#{menuMB.administrator}"/>   
                            <p:menuitem value="Clientes"   
                                        action="#{menuMB.irCliente}"   
                                        ajax="false"   
                                        rendered="#{menuMB.administrator or menuMB.simples}"/>   
                        </p:menuButton>   
                    </p:toolbarGroup>   
                    <p:toolbarGroup align="left">   
                        <p:menuButton value="Processo">   
                            <p:menuitem value="Manter Fotos"   
                                        action="#{menuMB.irAlbum}"   
                                        ajax="false"   
                                        rendered="#{menuMB.administrator or menuMB.simples}"/>   
                            <p:menuitem value="Selecionar Fotos"   
                                        rendered="#{menuMB.cliente}"   
                                        action="#{menuMB.irVisualizacaoAlbum}"   
                                        ajax="false"/>   
                        </p:menuButton>   
                    </p:toolbarGroup>   
                    <p:toolbarGroup align="left">   
                        <p:menuButton value="Sair">   
                            <p:menuitem value="Sair"   
                                        action="#{menuMB.sair}"   
                                        ajax="false"/>   
  
                        </p:menuButton>   
                    </p:toolbarGroup>   
                </p:toolbar>   
            </h:form>   
            <h:form id="frmGridCliente" >   
                <p:growl id="menssagensCliente"   
                         life="5000"/>   
                <p:dataTable id="dtClientes"   
                             widgetVar="dtClientes"   
                             var="cliente"   
                             value="#{clienteMB.clientes}"   
                             paginator="true"   
                             rows="5"   
                             selection="#{clienteMB.cliente}"   
                             selectionMode="single"   
                             rowSelectListener="#{clienteMB.selecionarCliente}"   
                             onRowSelectComplete="dlgCliente.show();"   
                             emptyMessage="Nao existe Cliente cadastrado"   
                             style="width:100%"   
                             update="frmCadastroCliente:itxNome, frmCadastroCliente:mskCpf, frmCadastroCliente:itxEmail ,frmCadastroCliente:itxSenha,  frmCadastroCliente:mskCelular, frmCadastroCliente:mskTelefone, frmCadastroCliente:cldDataNascimento, frmCadastroCliente:sorEnviaSms, frmCadastroCliente:sorEnviaEmail, frmCadastroCliente:clkGravar, frmCadastroCliente:clkAlterar, frmCadastroCliente:clkAlterarSenha">   
                    <p:column sortBy="#{cliente.nome}"   
                              filterBy="#{cliente.nome}">   
                        <f:facet name="header">   
                            <h:outputText value="Nome" />   
                        </f:facet>   
                        <h:outputText value="#{cliente.nome}" />   
                    </p:column>   
                    <p:column sortBy="#{cliente.cpf}"   
                              filterBy="#{cliente.cpf}">   
                        <f:facet name="header">   
                            <h:outputText value="CPF" />   
                        </f:facet>   
                        <h:outputText value="#{cliente.cpf}" />   
                    </p:column>   
                    <p:column sortBy="#{cliente.dataNascimento}"   
                              filterBy="#{cliente.dataNascimento}">   
                        <f:facet name="header">   
                            <h:outputText value="Data Nascimento"  />   
                        </f:facet>   
                        <h:outputText value="#{cliente.dataNascimento}">   
                            <f:convertDateTime locale="pt_br"/>   
                        </h:outputText>   
                    </p:column>   
                    <p:column sortBy="#{cliente.email}"   
                              filterBy="#{cliente.email}">   
                        <f:facet name="header">   
                            <h:outputText value="Email" />   
                        </f:facet>   
                        <h:outputText value="#{cliente.email}" />   
                    </p:column>   
                    <p:column sortBy="#{cliente.senha}"   
                              filterBy="#{cliente.senha}">   
                        <f:facet name="header">   
                            <h:outputText value="Senha" />   
                        </f:facet>   
                        <h:outputText value="#{cliente.senha}" />   
                    </p:column>   
                    <p:column sortBy="#{cliente.celular}"   
                              filterBy="#{cliente.celular}">   
                        <f:facet name="header">   
                            <h:outputText value="Celular" />   
                        </f:facet>   
                        <h:outputText value="#{cliente.celular}" />   
                    </p:column>   
                </p:dataTable>   
                <p:panel style="width:99.2%">   
                    <p:commandLink id="clkIncluir"   
                                   title="Incluir"   
                                   oncomplete="dlgCliente.show()"   
                                   action="#{clienteMB.incluir}"   
                                   update="frmCadastroCliente:itxNome, frmCadastroCliente:mskCpf, frmCadastroCliente:itxEmail ,frmCadastroCliente:itxSenha,  frmCadastroCliente:mskCelular, frmCadastroCliente:mskTelefone, frmCadastroCliente:cldDataNascimento, frmCadastroCliente:sorEnviaSms, frmCadastroCliente:frmCadastroCliente:sorEnviaEmail, frmCadastroCliente:clkGravar, frmCadastroCliente:clkAlterar">   
                        <h:graphicImage url="/imagens/novo.jpg"   
                                        style="border:0"/>   
                    </p:commandLink>   
                    <p:commandLink title="Apagar"   
                                   style="margin-left:20px"   
                                   actionListener="#{clienteMB.validarApagar}"   
                                   oncomplete="validarApagar(xhr, status, args)"   
                                   update="frmGridCliente:menssagensCliente"   
                                   process="frmGridCliente">   
                        <h:graphicImage url="/imagens/apagar.jpg"   
                                        style="border:0"/>   
                    </p:commandLink>   
                    <h:commandLink title="Voltar"   
                                   action="#{clienteMB.voltar}"   
                                   style="margin-left:20px">   
                        <h:graphicImage url="/imagens/voltar.jpg"   
                                        style="border:0"/>   
  
                    </h:commandLink>   
                </p:panel>   
                <p:dialog widgetVar="dlgExclui"   
                          header="Deseja apagar o cliente?"   
                          modal="true">   
                    <h:panelGrid columns="2">   
                        <p:commandLink title="Sim"   
                                       actionListener="#{clienteMB.apagar}"   
                                       style="margin-left:40px"   
                                       update="frmGridCliente"   
                                       oncomplete="dlgCliente.hide(); dlgExclui.hide();">   
                            <h:graphicImage url="/imagens/sim.jpg"   
                                            style="border:0"/>   
                        </p:commandLink>   
                        <p:commandLink title="Não"   
                                       style="margin-left:75px"   
                                       oncomplete="dlgCliente.hide(); dlgExclui.hide();">   
                            <h:graphicImage url="/imagens/nao.jpg"   
                                            style="border:0"/>   
                        </p:commandLink>   
                    </h:panelGrid>   
                </p:dialog>   
  
            </h:form>   
            <h:form id="frmCadastroCliente">   
                <p:dialog id="dlgCliente"   
                          widgetVar="dlgCliente"   
                          header="Cliente"   
                          width="500"   
                          closable="false">   
                    <h:panelGrid columns="2">   
                        <h:outputLabel value="Nome:"   
                                       for="itxNome" />   
                        <p:inputText id="itxNome"   
                                     value="#{clienteMB.cliente.nome}"   
                                     size="35"   
                                     required="true"   
                                     requiredMessage="Informe o Nome"/>   
                        <h:outputLabel value="CPF:"   
                                       for="mskCpf" />   
                        <p:inputMask id="mskCpf"   
                                     mask="999.999.999-99"   
                                     value="#{clienteMB.cliente.cpf}"   
                                     required="true"   
                                     requiredMessage="Informe o Cpf"/>   
                        <h:outputLabel value="Data Nascimento:"   
                                       for="cldDataNascimento" />   
                        <p:calendar id="cldDataNascimento"   
                                    value="#{clienteMB.cliente.dataNascimento}"   
                                    locale="pt_br"   
                                    readOnlyInputText="true"   
                                    navigator="true"   
                                    yearRange="-111:+39"   
                                    pattern="dd/MM/yyyy"/>   
                        <h:outputLabel value="Celular:"   
                                       for="mskCelular" />   
                        <p:inputMask id="mskCelular"   
                                     mask="999-9999-9999"   
                                     value="#{clienteMB.cliente.celular}"   
                                     required="true"   
                                     requiredMessage="Informe o celular"/>   
                        <h:outputLabel value="Telefone:"   
                                       for="mskTelefone" />   
                        <p:inputMask id="mskTelefone"   
                                     mask="999-9999-9999"   
                                     value="#{clienteMB.cliente.telefone}"/>   
                        <h:outputLabel value="E-mail:"   
                                       for="itxEmail"/>   
                        <p:inputText id="itxEmail"   
                                     value="#{clienteMB.cliente.email}"   
                                     size="35"   
                                     required="true"   
                                     requiredMessage="Informe o Email"/>   
                        <h:outputLabel value="Senha"   
                                       for="itxSenha"/>   
                        <p:inputText id="itxSenha"   
                                     value="#{clienteMB.cliente.senha}"   
                                     required="true"   
                                     requiredMessage="Informe a Senha"/>   
                    </h:panelGrid>   
                    <h:panelGrid columns="4" id="pnlSor">   
                        <h:outputLabel value="Enviar Sms?:"   
                                       for="sorEnviaSms" />   
                        <h:selectBooleanCheckbox  id="sorEnviaSms"   
                                                  value="#{clienteMB.cliente.enviaSms}"   
                                                  style="margin-right:50px"/>   
                        <h:outputLabel value="Enviar Email?:"   
                                       for="sorEnviaEmail" />   
                        <h:selectBooleanCheckbox  id="sorEnviaEmail"   
                                                  value="#{clienteMB.cliente.enviaEmail}"/>   
                    </h:panelGrid>   
                    <h:panelGrid columns="3" >   
                        <p:commandLink  id="clkGravar"   
                                        title="Gravar"   
                                        action="#{clienteMB.gravar}"   
                                        disabled="#{!empty clienteMB.cliente.id}"   
                                        style="margin-right:20px"   
                                        update="itxNome, mskCpf, itxEmail ,itxSenha, mskCelular, mskTelefone, cldDataNascimento, sorEnviaSms, sorEnviaEmail, frmGridCliente:dtClientes, frmGridCliente:menssagensCliente">   
                            <h:graphicImage url="/imagens/gravar.jpg"   
                                            style="border:0"/>   
                        </p:commandLink>   
                        <p:commandLink id="clkAlterar"   
                                       title="Alterar"   
                                       action="#{clienteMB.alterar}"   
                                       disabled="#{empty clienteMB.cliente.id}"   
                                       oncomplete="validarAlterar(xhr, status, args)"   
                                       update="itxNome, mskCpf, itxEmail ,itxSenha, mskCelular, mskTelefone, cldDataNascimento, sorEnviaSms, sorEnviaEmail, frmGridCliente, menssagensCliente"   
                                       style="margin-left:20px">   
  
                            <h:graphicImage url="/imagens/alterar.bmp"   
                                            style="border:0"/>   
  
                        </p:commandLink>   
                        <p:commandLink  id="clkCancelar"   
                                        title="Voltar"   
                                        style="margin-left:20px"   
                                        oncomplete="dlgCliente.hide();"   
                                        immediate="true">   
                            <h:graphicImage url="/imagens/voltar.jpg"   
                                            style="border:0"/>   
                        </p:commandLink>   
  
                    </h:panelGrid>   
                </p:dialog>   
            </h:form>   
        </h:body>   
    </f:view>   
</html> 

Deste ja agradeço

cara… primeiro… registrou o seu managed bean no faces config ? (se for jsf 1.2)

segundo : é totalmente errado usar o response.sendRedirect no seu mb, assim voce esta furando todo o ciclo de vida do jsf

o seu metodo voltar deve retornar uma string “voltar” e lá no faces config vc configura a navigation rule para quando o outcome for
voltar, ele mandar para a pagina desejada…

se você quer retornar uma String no método, coloque String na assinatura também…

public String voltar(){
    return "menu.xhtml";
}

o ideal seria vc mapear ele no faces e depois retornar na classe

<navigation-case>
	<from-outcome>voltar</from-outcome>
	<to-view-id>/pagina_anterior.jsp</to-view-id>
</navigation-case>
public String voltar(){  
    return "voltar";  
}

digaoneves

disculpa estava com return String. é que copiei errado mais o

public String voltar(){   
    return "menu.xhtml";   
}  

gera o mesmo erro

"o ideal seria vc mapear ele no faces e depois retornar na classe "
fiz este mapeamento tbm da null pointer de cara na pagina nem chama o metodo

mas para ele dar nullpointer direto, alguma coisa ele ta chamando antes…
debuga ele ae, e posta o erro aqui

como eu te falei, ele não entra no metodo, isso testei com o debug , quando clico no commandLink ele não entra no voltar

cara, posso estar enganado, mas a estrutura de uma página web seria

<html>
	<body>
		<f:view>
			<h:form>
			</h:form>
		</f:view>
	</body>
</html>

pelo o que eu percebi no seu, vc está com a view antes do body…
não sei se isso acaba implicando…

Na verdade no JSF 2 não precisa do f:view, mais so pra desencargo de consciencia e mudei Jona, mesmo assim não deu certo =S

quando eu crio minhas páginas JSF, e adiciono algum componente com a tag ele reclama que não tem uma f:view…
então eu sempre coloco.
poste o erro aqui para poder dar uma olhada fazendo o favor

type Exception report

message 

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

exception 

javax.servlet.ServletException
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:422)
	org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)


root cause 

java.lang.NullPointerException
	org.primefaces.component.datatable.DataHelper.decodeFilters(DataHelper.java:182)
	org.primefaces.component.datatable.DataTableRenderer.decode(DataTableRenderer.java:47)
	javax.faces.component.UIComponentBase.decode(UIComponentBase.java:787)
	javax.faces.component.UIData.processDecodes(UIData.java:1162)
	org.primefaces.component.datatable.DataTable.processDecodes(DataTable.java:595)
	javax.faces.component.UIForm.processDecodes(UIForm.java:225)
	javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1176)
	javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1176)
	javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:933)
	com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
	org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs.

pode ser alguma configuração do faces…
e o triste é que não sou expert nesse assunto
=(

estranho ser alguma configuração, é apenas um voltar…

aonde eu posso encontrar ajuda em =s

uma pergunta, esse código aqui

<h:commandLink title="Voltar" action="#{clienteMB.voltar}" style="margin-left:20px">     
	<h:graphicImage url="/imagens/voltar.jpg" style="border:0"/>     
</h:commandLink>

é um link que dentro dele está tentando adicionar uma imagem ?
será que não pode ser isso?
sei la, tentar mudar esse link por um botão, pois dentro do botão tem uma opção imagem se não me engano, que da para vc adicionar uma imagem tmb…

isso todos botoes eu add img assim,tirei tbm nada,

e se eu mandar o projeto pra vc, ?

pode dar uma olhada?

posso tentar…
mas não garanto nada

Coloca aqui o código da classe do MB

@ManagedBean(name = "clienteMB")
@ViewScoped
public class ClienteMB implements Serializable {

    private static final long serialVersionUID = 1247727700035978352L;
    private PessoaBO clienteBO;
    private Pessoa cliente;
    private Pessoa clienteAntigo;
    private String senha;
    private List<Pessoa> clientes;
    private List<Ativo> ativos;

    // Construtor
    public ClienteMB() {
        Pessoa usuario = ((Pessoa) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("usuario"));
        HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
        if (usuario == null || usuario.getPerfil().equals(Perfil.CLIENTE) || usuario.getAtivo().equals(Ativo.NAO)) {
            try {
                response.sendRedirect("acessoRestrito.xhtml");
            } catch (IOException ex) {
                JSFUtil.enviarMenssagemErro("Erro ao redirecionar");
            }
        }
        this.setAtivos(new ArrayList<Ativo>());
        this.getAtivos().add(Ativo.SIM);
        this.getAtivos().add(Ativo.NAO);
        this.setClienteBO(new PessoaBO());
        this.setCliente(new Pessoa());
        this.listar();
    }

    // Get e Set
    public PessoaBO getClienteBO() {
        return clienteBO;
    }

    public void setClienteBO(PessoaBO clienteBO) {
        this.clienteBO = clienteBO;
    }

    public Pessoa getCliente() {
        return cliente;
    }

    public void setCliente(Pessoa cliente) {
        this.cliente = cliente;
    }

    public Pessoa getClienteAntigo() {
        return clienteAntigo;
    }

    public void setClienteAntigo(Pessoa clienteAntigo) {
        this.clienteAntigo = clienteAntigo;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public List<Pessoa> getClientes() {
        return clientes;
    }

    public void setClientes(List<Pessoa> clientes) {
        this.clientes = clientes;
    }

    public List<Ativo> getAtivos() {
        return ativos;
    }

    public void setAtivos(List<Ativo> ativos) {
        this.ativos = ativos;
    }

    // Metodos
    public void incluir() {
        this.setCliente(new Pessoa());
        this.setSenha("");
    }

    public void selecionarCliente(SelectEvent evento) {
        this.setSenha(this.getCliente().getSenha());
        Pessoa cliente = new Pessoa();
        cliente.setId(this.getCliente().getId());
        cliente.setCpf(this.getCliente().getCpf());
        cliente.setEmail(this.getCliente().getEmail());
        cliente.setNome(this.getCliente().getNome());
        cliente.setPerfil(this.getCliente().getPerfil());
        cliente.setSenha(this.getCliente().getSenha());
        cliente.setCelular(this.getCliente().getCelular());
        cliente.setTelefone(this.getCliente().getTelefone());
        cliente.setAtivo(this.getCliente().getAtivo());
        cliente.setEnviaEmail(this.getCliente().getEnviaEmail());
        cliente.setEnviaSms(this.getCliente().getEnviaSms());
        cliente.setDataNascimento(this.getCliente().getDataNascimento());
        this.setClienteAntigo(cliente);
    }

    private Boolean validarClienteAlterar() {
        Boolean validacao = Boolean.TRUE;
        try {
            if (!CPFUtil.validarCPF(this.getCliente().getCpf())) {
                this.voltarClienteLista();
                JSFUtil.enviarMenssagemErro("Erro ao alterar : CPF inválido");
                validacao = Boolean.FALSE;
                return validacao;
            }
            if (!EmailUtil.validarEmail(this.getCliente().getEmail())) {
                this.voltarClienteLista();
                JSFUtil.enviarMenssagemErro("Erro ao alterar : Email inválido");
                validacao = Boolean.FALSE;
                return validacao;
            }
            if (!this.getClienteAntigo().getCpf().equals(this.getCliente().getCpf())) {
                if (!this.getClienteBO().validarCpfExistenteCliente(this.getCliente().getCpf())) {
                    this.voltarClienteLista();
                    JSFUtil.enviarMenssagemErro("Erro ao alterar : CPF ja cadastrado");
                    validacao = Boolean.FALSE;
                    return validacao;
                }
            }
            if (!this.getClienteAntigo().getEmail().equals(this.getCliente().getEmail())) {
                if (!this.getClienteBO().validarEmailExistenteCliente(this.getCliente().getEmail())) {
                    this.voltarClienteLista();
                    JSFUtil.enviarMenssagemErro("Erro ao alterar : Email ja cadastrado");
                    validacao = Boolean.FALSE;
                    return validacao;
                }
            }
            return validacao;
        } catch (Exception e) {
            e.printStackTrace();
            this.voltarClienteLista();
            JSFUtil.enviarMenssagemErro("Erro ao validar Usuario");
            this.setCliente(this.getClienteAntigo());
            validacao = Boolean.FALSE;
            return validacao;
        }
    }

    private void voltarClienteLista() {
        Integer indice = this.getClientes().indexOf(this.getClienteAntigo());
        this.getClientes().remove(this.getClienteAntigo());
        this.getClientes().add(indice, this.getClienteAntigo());
    }

    private Boolean validarClienteGravar() {
        Boolean validacao = Boolean.TRUE;
        try {
            if (!CPFUtil.validarCPF(this.getCliente().getCpf())) {
                JSFUtil.enviarMenssagemErro("Erro ao gravar : CPF inválido");
                validacao = Boolean.FALSE;
                return validacao;
            }
            if (!EmailUtil.validarEmail(this.getCliente().getEmail())) {
                JSFUtil.enviarMenssagemErro("Erro ao gravar : Email inválido");
                validacao = Boolean.FALSE;
                return validacao;
            }
            if (!this.getClienteBO().validarCpfExistenteCliente(this.getCliente().getCpf())) {
                JSFUtil.enviarMenssagemErro("Erro ao gravar : CPF ja cadastrado");
                validacao = Boolean.FALSE;
                return validacao;
            }
            if (!this.getClienteBO().validarEmailExistenteCliente(this.getCliente().getEmail())) {
                JSFUtil.enviarMenssagemErro("Erro ao gravar : Email ja cadastrado");
                validacao = Boolean.FALSE;
                return validacao;
            }
            return validacao;
        } catch (Exception e) {
            e.printStackTrace();
            JSFUtil.enviarMenssagemErro("Erro ao validar Usuario");
            validacao = Boolean.FALSE;
            return validacao;

        }
    }

    public void gravar() {
        this.getCliente().setCpf(CPFUtil.formatarCPF(this.getCliente().getCpf()));
        if (this.validarClienteGravar()) {
            try {
                this.getCliente().setAtivo(Ativo.SIM);
                this.getCliente().setPerfil(Perfil.CLIENTE);
                this.getClienteBO().gravar(this.getCliente());
                this.getClientes().add(this.getCliente());
                this.setCliente(new Pessoa());
                this.setSenha("");
                JSFUtil.enviarMenssagemSucesso("Cliente gravado com sucesso");
            } catch (Exception e) {
                e.printStackTrace();
                JSFUtil.enviarMenssagemErro("Erro ao gravar" + " " + e.getMessage());
            }
        }
    }

    public void alterar() {
        RequestContext.getCurrentInstance().addCallbackParam("alterou", false);
        this.getCliente().setCpf(CPFUtil.formatarCPF(this.getCliente().getCpf()));
        if (this.validarClienteAlterar()) {
            try {
                Integer indice = this.getClientes().indexOf(this.getCliente());
                this.getClienteBO().alterar(this.getCliente());
                this.getClientes().remove(this.getCliente());
                this.getClientes().add(indice, this.getCliente());
                RequestContext.getCurrentInstance().addCallbackParam("alterou", true);
                JSFUtil.enviarMenssagemSucesso("Cliente alterado com sucesso");
            } catch (Exception e) {
                this.voltarClienteLista();
                JSFUtil.enviarMenssagemErro("Erro ao alterar" + " " + e.getMessage());
            }

        }
    }

    public void validarApagar(ActionEvent event) {
        if (this.getCliente() == null || (this.getCliente() != null && this.getCliente().getEmail() == null)) {
            RequestContext.getCurrentInstance().addCallbackParam("isClienteSelecionado", false);
            JSFUtil.enviarMenssagemAtencao("Selecione um cliente na grid");
        } else {
            RequestContext.getCurrentInstance().addCallbackParam("isClienteSelecionado", true);
        }
    }

    public void apagar() {
        try {
            this.getClienteBO().apagar(this.getCliente());
            this.getClientes().remove(this.getCliente());
            JSFUtil.enviarMenssagemSucesso("Cliente apagado com sucesso");
        } catch (Exception e) {
            JSFUtil.enviarMenssagemErro("Erro ao apagar" + " "
                    + e.getMessage());
        }
    }

    public void listar() {
        try {
            this.setClientes(this.getClienteBO().listarClientes());
        } catch (Exception e) {
            e.printStackTrace();
            JSFUtil.enviarMenssagemErro("Erro ao listar" + " " + e.getMessage());
        }

    }

    public void voltar() {
        HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
        try {
            response.sendRedirect("menu.xhtml");
        } catch (IOException ex) {
           JSFUtil.enviarMenssagemErro("Erro ao voltar");
        }
    }
}

pela exceção gerada, parece que tem algo have com o filtro do prime no web.xml

    <filter>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>

mais nao sei o que