[RESOLVIDO] Validador JSF não valida corretamente

1 resposta
Leandro_M

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);
        }
    }
public String salvar() {

        try {
            //Salva pessoa no Banco de dados
        } catch (Exception ex) {
            //Exception
        }
        return "sucesso";
    }
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

1 Resposta

Leandro_M

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().

Criado 26 de abril de 2010
Ultima resposta 27 de abr. de 2010
Respostas 1
Participantes 1