Sou Iniciante em JSF e estou com um problema:
Tenho dois campos: 1 cpf e 1 cnpj.
Como faço uma validação para que, pelo menos um dos campos seja informado?
Eu havia feito o seguinte:
Coloquei o atributo required=“false” em ambos os campos e criado a validação através de métodos proprios.
Só que ao incluir o required=“false” nos dois campos, o validator não é executado.
Então o submit do formulario é executado sem que a validação seja feita.
Gostaria de fazer mais ou menos o seguinte:
...
if (StringUtils.isBlank(cpf) && StringUtils.isBlank(cnpj)){
throw new ValidatorException(new FacesMessage("Informe pelo menos um dos campos abaixo");
}
...
Como faço isso em JSF?
Uma opção seria validar via Java Script!
daria para fazer via javascript mas deve-se lembrar que o javascript pode estar desativado no lado do cliente, em jsf num sei direito como fazer sei que no struts tem um recurso (errorMessages) onde ele gera uma msg de erro, provavelmnete deve haver algo parecido no jsf, no struts faria algo do tipo:
if (StringUtils.isBlank(cpf) && StringUtils.isBlank(cnpj)){
errorMessages.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("chave da mensagem no arquivo properties"));
this.saveErrors(request, errorMessages);
return mapping.findForward("falha");
}
Encontrei um alternativa.
Fazer a validação no metodo que é executado no submit.
Não sei se é a uma boa prática mas, como não consegui pensar em nada melhor, acho que vou fazer assim.
obrigado por terem respondido!
Valeu!
Nesse caso é a melhor opção sim, pelo menos eu não consigo pensar em uma melhor!
Pessoal,
Acho que a solução recomendade seria implementar um método de validação no seu backing bean. Esse método tem a seguinte assinatura:
public void validar(FacesContext context, UIComponent toValidate, Object value)
Aí, de dentro desse método vc acessaria os campos necessários, mas pra isso vc provavelmente ia precisar fazer o binding dos seus campos de entrada.
<h:inputText id="cpf"
binding="bean.cpfInput">
</h:inputText>
<h:inputText id="cnpj"
binding="bean.cnpjInput"
validator="bean.validarCpfOuCnpj">
</h:inputText>
Mais ou menos esse caminho ai…