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}"/>
Onde o método obj.validar valida o que foi digitado (obj.input) pelo usuário
obj.salvar vai salvar as informações caso elas estejam válidas
Regra: Para um número ser válido ele tem que ter (em qualquer parte) o número 1. Ex: 90187
Situações:
Usuário digita 9 e clica em Salvar. Sistema informa que os dados não são válidos (não são qualificados…) e não executa o salvar()
Usuário digita 91 e clica em Salvar. Sistema informa que os dados foram processados com sucesso e executa o salvar()
Usuário digita a91 e clica em Salvar. Sistema informa existe caracter que não é número e não executa o salvar()
Usuário digita nada (deixa o campo em branco) e clica em Salvar. Sistema não valida e executa o método obj.salvar
Este é meu problema. [color=blue]O método obj.salvar tem que ser executado somente se as informações forem validadas corretamente.[/color]
Trecho do código:
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);
}
}
[code] public String salvar() {
try {
//Salva pessoa no Banco de dados
} catch (Exception ex) {
//Exception
}
return "sucesso";
}[/code]
Obs: Os dois métodos, validar e salvar, pertencem a mesma classe
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();
}
Obrigado