[RESOLVIDO] Validador JSF não valida corretamente

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

Consegui resolver o problema (eu acho)

Coloquei required="true" e requiredMessage="Digite algum valor" no h:inputText e agora ele não executa mais o salvar() nem o validar().