Executar uma validaçao qdo perde o focus Prime faces[RESOLVIDO]

25 respostas
B

pessoal tentei usar o onchange mais deu erro, preciso fazer na hora que perde o focus. a validaçao do campo

<h:outputLabel value="EMAIL:*"/>
                                <h:inputText id="email" value="#{UserBean.email}"
                                             onchange="#{UserBean.verificarEmail}" />

25 Respostas

M

b10machado,

O evento disparado quando um objeto html perde o foco é o onblur.

B

da esse erro /login.xhtml @58,85 onblur="#{UserBean.verificarEmail}": Property ‘verificarEmail’ not found on type bean.UserBean

M

Tenta assim:

<p:panel id="panel">
          <h:outputLabel value="EMAIL:*"/>  
          <h:inputText id="email" value="#{UserBean.email}"  onblur="verificarEmail();" />  
          <p:remoteCommand name="verificarEmail" actionListener="#{UserBean.verificarEmail}" update="panel"/>  
</panel>

Lembrando que se esse verificarEmail for um método, no seu bean ele deve ta com o nome getVerificarEmail().
Isso porque o JFS acessa as variaveis pelo método get.

R

Opa, se a validação for ajax… tenta assim

<p:inputText id="email" value="#{UserBean.email}"> <p:ajax event="blur" listener="#{UserBean.verificarEmail}" process="email" update="@form"/> </p:inputText>

abrass

R

Olá B10Machado,

Uso a própria validação do immediate. Caso o email já exista na base a camada de negocio trata a exception a atualiza o growl!

<p:inputText id=“email” value="#{usuarioBean.editado.email}" required=“true” validatorMessage=“e-mail invalido!” immediate=“true”>
<f:validateRegex pattern="[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+" />
</p:inputText>

abs

M

O erro acontece porque o JSF procura um método getVerificarEmail no UserBean.

Tenta fazer da forma que o marcos4ft ou rfagalde falaram.

B

entao tentei dessa forma mais nao apareceu a mensagem!!!

<h:inputText id="email" value="#{UserBean.email}" >
                                    <p:ajax event="blur" listener="#{UserBean.verificarEmail2}"
                                            process="email" update="@form"/>
                                </h:inputText>
public void getVerificarEmail2(){
          if(email.length() > 1){
             FacesContext.getCurrentInstance().addMessage(null,
                     new FacesMessage(FacesMessage.SEVERITY_INFO, ".......", null));
          }
     }
R

Opa, verifica se teu componente de mensagem está dentro do mesmo form do componente inputText… se não estiver, atualiza diretamente o componente de mensagem na ação update do ajax:

update=":formSuaMensagem:suaMensagem"

Abrass

R

Aé… e pode mudar o método

public void getVerificarEmail2(){ if(email.length() > 1){ FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, ".......", null)); } }

para

public void verificarEmail2(){ if(email.length() > 1){ FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, ".......", null)); } }

Ai então tu usa

listener="#{UserBean.verificarEmail2}"
B

nao funcionou o q eu fiz de errado ??? obrigado

esta em um form diferente

<h:form id="mensagens" styleClass="erros">
                    <p:messages id="mensagem" />
                </h:form>

.........................................................................

   <h:inputText id="email" value="#{UserBean.email}" >
                                    <p:ajax event="blur" listener="#{UserBean.verificarEmail2}"
                                            process="email" update="mensagens:mensagem"/>
                                </h:inputText>
R

bah… agora que percebi que o código que postei é pra primefaces… foi mal… mas da uma olhada aqui

http://www.mkyong.com/jsf2/jsf-2-0-ajax-hello-world-example/

e aqui

http://blog.gilliard.eti.br/2009/05/ajax-no-jsf-2/

Esse é a sintaxe de ajax do jsf mesmo, sem bibliotecas

espero que ajude

B

estou usando primefaces msm!!

msm mudando para <p:input… da na msm

R

que versão?

B

2.2.1

L

Usando este codigo, qual o erro?

[]'s

b10machado:
nao funcionou o q eu fiz de errado ??? obrigado

esta em um form diferente

<h:form id="mensagens" styleClass="erros">
                    <p:messages id="mensagem" />
                </h:form>

.........................................................................

   <h:inputText id="email" value="#{UserBean.email}" >
                                    <p:ajax event="blur" listener="#{UserBean.verificarEmail2}"
                                            process="email" update="mensagens:mensagem"/>
                                </h:inputText>

R

tenho esse codigo que mandei funcionando na 3.1… apenas não aparece a mensagem o método não está executando?

B

entao executa sem erro mais nao chama o metodo para mostra a mensagem!!!

R

Coloca o código completo ai… deveria funcionar, segundo o “manual”

B

been so o metodo!!

public void getVerificarEmail2(){
          if(email.length() > 1){
             FacesContext.getCurrentInstance().addMessage(null,
                     new FacesMessage(FacesMessage.SEVERITY_INFO, ".......", null));
          }
     }

pagina

<?xml version='1.0' encoding='UTF-8' ?>
<!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:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui">

    <h:head>
        <title>LOCKBOX</title>
        <link rel="stylesheet" type="text/css" href="Css/css_layout.css"/>
    </h:head>

    <f:view>
        <center>
            <h:body>
                <center>
                    <h:form styleClass="banner">
                        <p:graphicImage value="imagens/bannerpng1.png" width="98% " height="5%"/>
                    </h:form>
                </center>
                <h:form id="mensagens" styleClass="erros">
                    <p:messages id="mensagem" />
                </h:form>

                <h:form id="form1" styleClass="tabLogin">
                    <p:tabView effect="opacity" effectDuration="normal">

                        <p:tab title="Login">
                            <h:panelGrid >
                                <h:graphicImage value="imagens/icone.png" />
                                <h:outputLabel value="Bem Vindo ao LockBox" style="font-weight: bold"/>
                                <br/>
                                <h:outputLabel value="LOGIN:"/>
                                <h:inputText id="emailL" value="#{UserBean.emailLogar}" />
                                <br/>
                                <h:outputLabel id="senhaL" value="SENHA:"/>
                                <h:inputSecret value="#{UserBean.senhaLogin}"/>
                                <br/>
                                <p:commandButton value="Logar" actionListener="#{UserBean.validarLogin}"
                                                 ajax="false" type="submit"/>
                                <br/>
                                <p:commandButton value="Esqueci Minha Senha"
                                                 onclick="dlg.show();" type="button" />

                            </h:panelGrid>
                        </p:tab>

                        <p:tab title="Criar Conta">
                            <h:panelGrid >
                                
                                
                                <h:graphicImage value="imagens/icone.png" />

                                <h:outputLabel value="Crie sua Conta no LockBox" style="font-weight: bold"/>
                                <br/>
                                <h:outputLabel value="EMAIL:*"/>

                                <h:inputText id="email" value="#{UserBean.email}" >
                                    <p:ajax event="blur" listener="#{UserBean.verificarEmail2}"
                                            process="email" update="mensagens:mensagem"/>
                                </h:inputText>
                                
                                <h:outputLabel value="CONFIRMAR EMAIL:*"/>
                                <h:inputText id="email2" value="#{UserBean.email2}"/>
                                <br/>
                                <h:outputLabel value="SENHA:*"/>
                                <h:inputSecret id="senha" value="#{UserBean.senha}"/>
                                <h:outputLabel value="CONFIRMAR SENHA:*"/>
                                <h:inputSecret id="senha2" value="#{UserBean.senhaComp}" />
                                <p/>
                                <p:commandButton value="CRIAR CONTA" ajax="false" type="submit"
                                                 actionListener="#{UserBean.verificarEmail}"  />
                            </h:panelGrid>
                        </p:tab>

                    </p:tabView>

                </h:form>

                <p:dialog header="Esqueci a Senha" widgetVar="dlg" resizable="false"
                          height="200" width="350" >
                    <h:form id="form2">

                        <h:panelGrid columns="2" style="margin-bottom:10px">
                            <h:outputLabel for="email" value="Digite seu Email:" />
                            <p/>
                            <h:inputText id="email" value="#{UserBean.email}" size="30"/>
                            <p/>
                        </h:panelGrid>
                        <center>
                            <p:commandButton id="recuperar" value="Enviar"
                                             type="submit"
                                             actionListener="#{UserBean.recuperarSenha}"
                                             oncomplete="dlg.hide();"/>
                        </center>
                    </h:form>
                </p:dialog>
            </h:body>
        </center>
    </f:view>
</html>
R

bom, as possíveis causas…

  • O método deve se chamar verificarEmail2 e não getVerificarEmail2, pois o listener segue outro padrão de nomes… se o nome for verificarEmail2, você deve chama-lo com #{UserBean.verificarEmail2} na página
  • Nas versões mais recentes do primefaces, quando uso um componente de outro form, preciso colocar dois pontos antes do nome dele, assim :mensagens:mensagem, mas não sei se isso se aplica a essa versão.

Fora isso, parece estar tudo certo… se mesmo com esses ajustes não funcionar, tente fazer uma versão mais “enxuta” da pagina e do bean, apenas com o que tu quer testar… que ai fica mais facil de identificar o problema.

abrass

B

deu certo mano era o nome do metodo!!! tinha esquecido d mudar, brigado fera!!!

M

b10machado, melhor você postar o código completo da página e também do bean pra gente verificar melhor onde tá a falha.

B

so uma ultima pergunta cara, eu programa mais para android to meio perdido aki, entao como eu faço por exemplo no

email:‘email q a existe’

ai qro deixar inativo o email confirma:

e facil fazer isso??

M

Putz, quando respondi acho que a página estava desatualizada…foi mals

B

suave!!

entao se alguem souber como eu faço isso aki agradesço

Email: campo: se existir ja o email digitado

email confirma: desabilitado.

Criado 25 de março de 2012
Ultima resposta 26 de mar. de 2012
Respostas 25
Participantes 6