Boa Tarde!!
Estou tentando fazer um login de usuário.
para os dois inputs, usuario e senha, eu estou especificando para que sejam campos obrigatórios. E para isso eu retorno o aviso logo embaixo dos inputs de cada um. Para fazer isso eu coloquei o required = true e requiredMessage=“Campo Obrigatorio!” no input de cada um.
Quando o usuário vai colocar o usuario e senha, e clica no botão entrar, e o usuario ou senha estão errados, eu coloco uma outra mensagem indicando esta falha. Logo abaixo do botão entrar mesmo.
Para esta validação de login ou senha errados, eu acessei o controller, e passei a mensagem para o FacesMessage e o FacesMessage para o FacesContext, a mensagem enviada aparece perfeitamente no h:messages.
O PROBLEMA: Quando o usuário esquece de colocar usuario ou senha, a mensagem de campo obrigatório aparece nos lugares corretos, porém, no h:messages que é da validação que eu fiz pelo controller, aparece as mensagens de campo obrigatório dos inputs também.
abaixo estão os meus códigos e também uma figura com o resultado da página que deu erro:
página de login
<!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">
<f:loadBundle basename="paginasCss" var="paginas" />
<head>
<title>Testes</title>
<link type="text/css" href="css/login.css" rel="stylesheet" />
<link type="text/css" href="css/padrao.css" rel="stylesheet" />
</head>
<body bgcolor="#B8B8B8">
<div class="login01">
<form jsfc="h:form" id="formLogin">
<fieldset class="fieldsetLogin"><br />
<label for="usuario">Usuario:</label><input jsfc="h:inputText" value="#{usuarioController.usuario.usuario}" size="30" id="usuario" required="true" requiredMessage="Campo Obrigatorio!" />
<span jsfc="h:message" for="usuario" class="inputSpan"></span>
<br /><br />
<label for="senha">Senha:</label><input jsfc="h:inputSecret" value="#{usuarioController.usuario.senha}" class="senha" size="30" id="senha" required="true" requiredMessage="Campo Obrigatorio!"/>
<span jsfc="h:message" for="senha" class="inputSpan"></span>
<br /><br />
<input jsfc="h:commandButton" type="submit" action="#{usuarioController.logar}" class="confirmar" value="Entrar" id="submit" />
<br />
<span jsfc="h:messages" for="formLogin" class="inputSpan"></span>
</fieldset>
</form>
</div>
</body>
</html>
meu UsuarioController
package br.com.agenda.controller;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.persistence.NoResultException;
import br.com.agenda.dao.UsuarioDaoImp;
import br.com.agenda.entities.Usuario;
public class UsuarioController {
private UsuarioDaoImp usuarioDaoImp;
private Usuario usuario;
public UsuarioController(){
usuario = new Usuario();
}
public String logar(){
String resultado = "logar";
FacesContext context = FacesContext.getCurrentInstance();
usuarioDaoImp = new UsuarioDaoImp();
Map<String, Object> params = new HashMap<String, Object>();
params.put("usuario", usuario.getUsuario());
params.put("senha", usuario.getSenha());
try{
this.setUsuario(usuarioDaoImp.pesquisarElemento("select a from Usuario a where a.usuario=:usuario and a.senha=:senha", params));
if(this.getUsuario() == null){
usuario = new Usuario();
context.addMessage("formLogin", new FacesMessage("Usuario e/ou Senha incorreto!", null));
resultado = "erro";
}
}catch(NoResultException he){
he.printStackTrace();
}
return resultado;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public UsuarioDaoImp getUsuarioDaoImp() {
return usuarioDaoImp;
}
public void setUsuarioDaoImp(UsuarioDaoImp usuarioDaoImp) {
this.usuarioDaoImp = usuarioDaoImp;
}
}
Qualquer ajuda é muito bem vinda!!!