Solucionado (ver solução)
Solucionado
(ver solução)
10
respostas

Dúvida no Ex. 4 da Aula 10 - Atualizando para JSF 2.2

Olá,

A validação do campo e-mail não está funcionando como deveria. Quando preencho esse campo incorretamente então a validação não está ocorrendo.

A seguir o meu projeto no GitLab: https://gitlab.com/cviniciusm/jsf-livraria

Por que a validação não está funcionando ?

10 respostas

Oi Cassius,

o código parece ok, vc está usando qual navegador?

No código fonte (no html dentro do navegador) aparece o campo com type="email"?

abs

Oi Cassius, tudo bem?

Não testei, mas pra usar o type=email você precisa submeter o formulário sem ajax.

Tenta colocar ajax=false no p:commandButton.

Abraços!

é verdade!! vlw leo :)

Olá,

Conforme o projeto que citei, não estou usando ajax no p:commandButton no login.xhtml .

Um vez que estou usando Primefaces, para deixar mais uniforme o formulário, usarei o f:validateRegex para validar o e-mail, conforme o seguinte arquivo: http://www.mkyong.com/jsf2/primefaces/primefaces-jsf-email-validator-example/

P.S.: acredito que a expressão regular acima é mais completa que aquela da documentação do HTML5 (https://www.w3.org/TR/html-markup/input.email.html).

Oi Cassius,

o problema é que o p:commandButton sempre usa ajax :) Não é preciso usar f:ajax, ele já tem isso embutido.

no html aparece o type="email"?

abs

Oi Cassius,

Mais uma coisa: temos um treinamento dedicado ao primefaces agora:

https://cursos.alura.com.br/course/jsf-primefaces

abs, Nico

solução!

Olá,

Achei a solução aqui: http://stackoverflow.com/questions/16175178/hmessages-does-not-display-messages-when-pcommandbutton-is-pressed

Deve-se usar <p:messages ... autoUpdate="true" /> ou <p:commandButton ... update=":messages" /> !

Olá Nico,

Pretendo fazer esse curso "Curso Java e JSF 2 - II: Componentes ricos com Primefaces" em breve :-).

Olá,

Só para finalizar fiz o seguinte no meu login.xhtml :

...
<p:outputLabel value="Email:" for="email" />

<p:inputText id="email" value="#{loginBean.usuario.email}"
    required="true" validatorMessage="Formato de e-mail invá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>

<p:outputLabel value="Senha:" for="senha" />

<p:password id="senha" value="#{loginBean.usuario.senha}" required="true" />

<p:message for="senha" id="messageSenha" autoUpdate="true" />

<p:commandButton value="Efetuar Login" action="#{loginBean.efetuaLogin}" update="@form" />

Assim, a mensagem "Formato de e-mail inválido" aparece quando o formulário é submetido com e-mail incorreto.

Oi Cassiu,

perfeito, assim vc executou uma validação com regex server-side. a outra validação (f:passThroughAttribute) seria cliente-side, ou seja dentro do navegador.

abs

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software