Pessoal,
Estou com uma dúvida sobre o validator do JSF. Veja o código:<h:inputText id="Digite um número:"
validator="#{obj.validar}"
binding="#{obj.input}"/>
<h:commandButton id="botao" type="submit" value="Salvar" action="#{obj.salvar}"/>
public void validar(FacesContext context, UIComponent toValidate, Object value) {
try {
String valor = String.valueOf(value);
//valida é um objeto do tipo Validador (uma classe específica que criei para fazer as validações de tipo de dados)
if (!valida.validar(valor)) {
((UIInput) toValidate).setValid(false);
//valida.getMensagem() --> é uma mensagem de erro emitida pela classe Validador
mensagem = new FacesMessage(valida.getMensagem());
context.addMessage(toValidate.getClientId(context), mensagem);
} else {
pessoa.setNum(Integer.parseInt(valor));
}
} catch (Exception ex) {
mensagem = new FacesMessage("Informa erro ao usuário --> "+ex);
context.addMessage(toValidate.getClientId(context), mensagem);
}
}
public String salvar() {
try {
//Salva pessoa no Banco de dados
} catch (Exception ex) {
//Exception
}
return "sucesso";
}
Encontrei uma saída chamando o salvar dentro o if. Mas eu queria entender porque o salvar foi executado sendo o validador nem foi acionado.
if (!valida.validar(valor)) {
((UIInput) toValidate).setValid(false);
//valida.getMensagem() --> é uma mensagem de erro emitida pela classe Validador
mensagem = new FacesMessage(valida.getMensagem());
context.addMessage(toValidate.getClientId(context), mensagem);
} else {
pessoa.setNum(Integer.parseInt(valor));
salvar();
}