To seguindo um exercicio de cadastro do livro “programaão java para web”, porem quando tento salvar o formulário, da a mensagem de erro de validação, mesmo com todos os campos corretos,e no console aparece o erro "GRAVE: Attribute ‘for’ of UIMessage must not be null. Pesquisei sobre ele e vi que se refere sobre mensagem do FaceContext, tentei tirar a parte do código que usava ele, mas continuo dando erro, agora não sei como agir para solucionar
o formulario
<!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:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title> Cadastro de usuarios</title>
</h:head>
<h:body>
<h1>Cadastro de usuarios</h1>
<h:form id="cadastro">
<h:message/>
<h:inputHidden value="#{usuarioBean.usuario.codigo}" />
<h:inputHidden value="#{usuarioBean.usuario.ativo}" />
<h:panelGrid columns="2">
<h:outputLabel value="Nome:" for="nome"/>
<h:inputText id="nome" label="nome" value="#{usuarioBean.usuario.nome}" size="30" maxlength="30" required="true" requiredMessage="Você não tem nome?">
<f:validateLength minimum="10" maximum="30"/>
</h:inputText>
<h:outputLabel value="Data de nascimento:" for="data" />
<h:inputText id="data" label="Data de Nascimento" value="#{usuarioBean.usuario.nascimento}" size="10" maxlength="10" required="true">
<f:convertDateTime dateStyle="medium"/>
</h:inputText>
<h:outputLabel value="Celular:" for="celular"/>
<h:inputText id="celular" label="Celular" value="#{usuarioBean.usuario.celular}" size="10" />
<h:outputLabel value="Email:" for="email"/>
<h:panelGroup>
<h:inputText id="email"
label="e-mail"
value="#{usuarioBean.usuario.email}"
size="50" maxlength="50" required="true"
validatorMessage="email inválido" >
<f:validateRegex pattern="[a-zaA-Z0-9\-\_\.]+@[a-zA-Z0-9\-\_\.]+" />
</h:inputText>
<h:message for="email"/>
</h:panelGroup>
<h:outputLabel value="Idioma:" for="idioma" />
<h:selectOneMenu id="idioma" value="#{usuarioBean.usuario.idioma}">
<f:selectItem itemValue="pt_BR" itemLabel="Português"/>
<f:selectItem itemValue="en_US" itemLabel="English"/>
<f:selectItem itemValue="es_ES" itemLabel="Espanol"/>
</h:selectOneMenu>
<h:outputLabel value="Login:" for="login"/>
<h:inputText id="login"
label="Login"
value="#{usuarioBean.usuario.login}"
size="15" maxlenght="15" required="true"
validatorMessage="Login deve ter no minimo 5 e no maximo 15 caracteres e só pode ter os simbolos '.' e '_'" >
</h:inputText>
<h:outputLabel value="Senha:" for="senha" />
<h:inputSecret id="senha" label="Senha" value="#{usuarioBean.usuario.senha}" size="10" maxLength="10" required="true" redisplay="true" />
<h:outputLabel value="Confirmar senha:" for="confirmaSenha" />
<h:inputSecret id="confirmaSenha" label="Confirma senha" value="#{usuarioBean.confirmaSenha}" size="10" maxLength="10" required="true" redisplay="true" />
</h:panelGrid>
<h:commandButton action="#{usuarioBean.salvar}" value="Salvar"/>
</h:form>
</h:body>
</html>
o bean
package financeiro.web;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import financeiro.usuario.Usuario;
import financeiro.usuario.UsuarioRN;
@ManagedBean(name = "usuarioBean")
@RequestScoped
public class UsuarioBean {
private Usuario usuario = new Usuario();
private String confirmaSenha;
public String novo() {
this.usuario = new Usuario();
this.usuario.setAtivo(true);
return "usuario";
}
public String salvar(){
FacesContext context = FacesContext.getCurrentInstance();
String senha = this.usuario.getSenha();
if(!senha.equals(this.confirmaSenha)){
FacesMessage facesMessage = new FacesMessage("A senha não foi confimada corretamente");
context.addMessage(null, facesMessage);
return null;
}
UsuarioRN usuarioRN = new UsuarioRN();
usuarioRN.salvar(this.usuario);
return "usuarioSucesso";
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public String getConfirmaSenha() {
return confirmaSenha;
}
public void setConfirmaSenha(String confirmaSenha) {
this.confirmaSenha = confirmaSenha;
}
}