não consigo exibir o erro no p:message

5 respostas
J

oi pessoal

to quase me matando aqui pra resolver um problema que ta me tirando o sono =/

Na minha view, tenho um campo CPF que terá de validar se o CPF do cliente é valido ou se já está cadastrado. Então criei um metodo consultaCPF que vai fazer essas duas validações. Caso de algum erro, quero que exiba no message do campo.
<p:inputText value="#{clienteController.cliente.documento}" id="campoDocumento" converter="cpfConverter" maxlength="14" size="14" onkeyup="formataCpfCnpj(this,this.value)" required="true" requiredMessage="#{msg.preencher_cpf}">
                            <p:ajax event="blur" oncomplete="#{clienteController.consultaCPF()}" process="@this" update="box1,box2"/>
                        </p:inputText>
                        <p:message for="campoDocumento" rendered="true"/>

Nesse método, ele encontra o cliente, instancia o FacesMessage, seta a mensagem de erro dentro dele e adiciona no facesContext. Mas não aparece o erro na tela.

Não da nenhum erro em log, ao debugar ele faz todo procedimento certo. Só não exibe o p:message
public void consultaCPF()
    {
        ClienteFacade facade = new ClienteFacade ();
        if(cliente != null && cliente.getDocumento() != null)
        {
            if(Validator.validaCPFCNPJ(cliente.getDocumento()))
            {
              
                Cliente clienteEncontrado = facade.findClienteByCPF(cliente.getDocumento());
                if(clienteEncontrado != null)
                {
                    FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Cliente já existente", null);
                    FacesContext.getCurrentInstance().addMessage(null, facesMsg);
                }
            }
            else
            {
                FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "CPF inválido", null);
                FacesContext.getCurrentInstance().addMessage(null, facesMsg);
            }
        } 
       
    }

E outros erros que eu to tendo, consigo tratar sempre no p:messages, só esse q deu essa zica.

Alguem me ajude por favor :shock:

5 Respostas

S

Coloque um id na mensagem:

<p:message for="campoDocumento" rendered="true" id="msgCPF"/>

E no ajax coloque um update na mensagem:

<p:ajax event="blur" oncomplete="#{clienteController.consultaCPF()}" process="@this" update="box1,box2, msgCPF"/>

Ja tive um problema parecido com esse, e so consegui resolver atualizando a mensagem.

Falou.

J

ja fiz isso, e nao deu certo. Ele nao da erro porem nao exibe nada na tela

J

cara reparei uma coisa

tirei a função do event=blur (da tag ajax) e coloquei num p:commandLink separado…funcionou. E atualizou certinho mostrando o erro.

Sera um bug do primefaces?

<p:commandLink value="Testar" action="#{clienteController.consultaCPF()}" process="@form" update="box1,box2,msg"/>
J

só tem um detalhe, eu precisava que a validação ocorresse automaticamente. Sem intervenção do usuário (no caso o clique com o mouse)

S

Ao invés do p:ajax tente usar o f:ajax.

ele é um pouco diferente do p:ajax mas tem propriedades equivalentes.

segue um exemplo:

<f:ajax event="keyup" render="text count" listener="#{bean.countListener}"/>

Att.

Criado 25 de fevereiro de 2012
Ultima resposta 26 de fev. de 2012
Respostas 5
Participantes 2