Problema ao validar email com f:validateRegex[RESOLVIDO]

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:outputLabel value="Email *" for="email"/>
<p:inputText id="email" value="#{adminBean.administrador.pessoa.email}"
	maxlength="100" size="100"
	required="true" requiredMessage="Informe o email"
	validatorMessage="Informe um email válido">
	<f:validateRegex pattern="^[_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.

o que está acontecendo?

[quote=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:outputLabel value="Email *" for="email"/>
<p:inputText id="email" value="#{adminBean.administrador.pessoa.email}"
	maxlength="100" size="100"
	required="true" requiredMessage="Informe o email"
	validatorMessage="Informe um email válido">
	<f:validateRegex pattern="^[_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.

o que está acontecendo?
[/quote]

Arruma ai

<f:validateRegex pattern="(^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$)" />

Eu só vou poder testar à noite…assim que eu tiver uma resposta eu posto aki…

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…

[quote=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…[/quote]

como esta na classe, passe ai
esta usando alguma anotação?

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;

1 curtida

Na classe eu utilizo o @Email do hibernate validator:

@Email
@Column(length=100)
@NotNull(message="Informe o email")
private String email;

Será que o problema pode ser esse?

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:outputLabel value="Email *" for="email"/>
<p:inputText id="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") 
    private String email;

Agradeço a ajuda…vlew mesmo…qualquer dúvida é só postar

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.

[quote=igorthurler]
O controle da tela

<h:outputLabel value="Email *" for="email"/>
<p:inputText id="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") 
    private String email;

Agradeço a ajuda…vlew mesmo…qualquer dúvida é só postar[/quote]

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.

flo abraços

1 curtida

Kevin, neste artigo você verá uma introdução sobre o assunto: http://guj.com.br/articles/1

[quote=ErickRAR]Kevin, neste artigo você verá uma introdução sobre o assunto: http://guj.com.br/articles/1

[/quote]

Valeu obrigado mesmo.

Abraços