Problema ao validar email com f:validateRegex[RESOLVIDO]
11 respostas
I
igorthurler
Galera, eu aki mais uma vez…com meus problemas redundantes de solução não ortodoxa…
Seguinte…em um dos meus cadastros, tenho que fazer a validação de um email…
coloquei o seguinte código:
<h:outputLabelvalue="Email *"for="email"/><p:inputTextid="email"value="#{adminBean.administrador.pessoa.email}"maxlength="100"size="100"required="true"requiredMessage="Informe o email"validatorMessage="Informe um email válido"><f:validateRegexpattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$"/></p:inputText>
Se eu naum preencher nada, ele exibe a mensagem “Informe o email”
Se eu preencher assim igorthurler@ya, ele mostra “Informe um email válido”
Agora se eu preencher assim igorthurler, ele mostra a mensagem “Informe um email válido” duas vezes.
Galera, eu aki mais uma vez…com meus problemas redundantes de solução não ortodoxa…
Seguinte…em um dos meus cadastros, tenho que fazer a validação de um email…
coloquei o seguinte código:
<h:outputLabelvalue="Email *"for="email"/><p:inputTextid="email"value="#{adminBean.administrador.pessoa.email}"maxlength="100"size="100"required="true"requiredMessage="Informe o email"validatorMessage="Informe um email válido"><f:validateRegexpattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$"/></p:inputText>
Se eu naum preencher nada, ele exibe a mensagem “Informe o email”
Se eu preencher assim igorthurler@ya, ele mostra “Informe um email válido”
Agora se eu preencher assim igorthurler, ele mostra a mensagem “Informe um email válido” duas vezes.
Eu só vou poder testar à noite…assim que eu tiver uma resposta eu posto aki…
I
igorthurler
Continua a mesma coisa…parece que ele está validando o campo 2 vezes ou retornando 2 erros com a mesma mensagem.
Quando eu coloco o @ ele retorna uma mensagem mas c eu tirar ele retorna 2…
É apenas uma suposição, mas me parece que a validação identifica a ausência do @ e do . (ponto) e retorna um erro para cada situação…
T
tmvolpato
igorthurler:
Continua a mesma coisa…parece que ele está validando o campo 2 vezes ou retornando 2 erros com a mesma mensagem.
Quando eu coloco o @ ele retorna uma mensagem mas c eu tirar ele retorna 2…
É apenas uma suposição, mas me parece que a validação identifica a ausência do @ e do . (ponto) e retorna um erro para cada situação…
como esta na classe, passe ai
esta usando alguma anotação?
A
aprendizweb1 like
Bom, eu valido o email com annotations na entidade desta forma:
@Pattern(regexp ="^[\\w\\-]+(\\.[\\w\\-]+)*@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$", message="E-mail com formato incorreto.")
private String email;
I
igorthurler
Na classe eu utilizo o @Email do hibernate validator:
@Email@Column(length=100)@NotNull(message="Informe o email")privateStringemail;
Será que o problema pode ser esse?
I
igorthurler
Galera, com a ajuda dos companheiros mvolpato e aprendizweb consegui resolver o problema…
Vou explicar as minhas conclusões…
O primeiro ponto que observei é que a tela estava utilizando 2 pontos para verificação. O primeiro era a o comando <f:validateRegex pattern="^[_A-Za-z0-9-+]+(.[_A-Za-z0-9-]+)@[A-Za-z0-9-]+(.[A-Za-z0-9]+)(.[A-Za-z]{2,})$" /> que estava na tela e o segundo era a anotação @Entity da minha classe Pessoa.
Eu não entendi porque que a validação da classe é feita. Outro ponto a considerar é que a anotação @Entity não está validando corretamente o email. Se o string informado tivesse o @ a anotação está considerando como email válido independente da ausência do resto do email.
Para que a validação fosse feita em apenas um ponto, eu retirei o comando f:validateRegex da tela já que a validação do objeto é mais importante pro meu sistema.
Segue a baixo os trechos de código:
O controle da tela
<h:outputLabelvalue="Email *"for="email"/><p:inputTextid="email"value="#{adminBean.administrador.pessoa.email}"maxlength="100"size="100"required="true"requiredMessage="Informe o email"validatorMessage="Informe um email válido"></p:inputText>
A anotação do atributo email
@Column(length=100)@Pattern(regexp="^[\\w\\-]+(\\.[\\w\\-]+)*@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$",message="Informe um email válido")@NotNull(message="Informe o email")privateStringemail;
Agradeço a ajuda…vlew mesmo…qualquer dúvida é só postar
A
aprendizweb
Possivelmente, pois o que me consta o @Email do hibernate possui um regexp interno, que pode talvez estar entrando em conflito com seu regexp definido no xhtml, porém existe uma maneira de definir um padrão na sua propria entidade. No meu caso, fiz também duas validações para quando o campo estiver nulo exibir uma mensagem de advertencia (essa eu defini no meu xhtml), e quando o email estiver no formato incorreto eu defini na minha entidade.
K
Kevin_Stortz11 like
igorthurler:
O controle da tela
<h:outputLabelvalue="Email *"for="email"/><p:inputTextid="email"value="#{adminBean.administrador.pessoa.email}"maxlength="100"size="100"required="true"requiredMessage="Informe o email"validatorMessage="Informe um email válido"></p:inputText>
A anotação do atributo email
@Column(length=100)@Pattern(regexp="^[\\w\\-]+(\\.[\\w\\-]+)*@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$",message="Informe um email válido")@NotNull(message="Informe o email")privateStringemail;
Agradeço a ajuda…vlew mesmo…qualquer dúvida é só postar
Fala ae galera beleza?
to entrando em um tópico resolvido ai, mas talvez alguem mais tenha essa minha dúvida, irei fazer essa validação no meu projeto também mas não queria apenas pegá-la aqui e pronto, eu tava olhando aqui e fiquei com uma dúvida, o que é essa sequencia de letras aqui e como são definidas elas? regexp ="^[\w\-]+(\.[\w\-]+)*@([A-Za-z0-9-]+\.)+[A-Za-z]{2,4}$", se alguem puder me explicar ou indicar algum lugar aonde tenha a explicação agradeço.