Cursos / Informática para Internet / Desenvolvimento Web II / Aula

arrow_back Aula 03 - Validação de Campos no JSF

Validação Imperativa

As validações declarativas são simples de serem utilizadas, mas geralmente não são suficientes para as diferentes regras de negócio em um sistema de informação. Muitas vezes, não queremos validar apenas a não existência de uma informação em um determinado campo. Existem casos que precisamos ir além disso, por exemplo: verificar se uma determinada matrícula já existe em um banco de dados durante um cadastro de aluno.

Esses casos estão associados às regras de negócio da aplicação e para eles, onde a validação declarativa não é suficiente, recorremos à validação imperativa. Para esse tipo de validação podemos criar métodos nos controllers JSF (ManagedBeans) ou criar validadores customizados.

 

Validação usando métodos nos controllers

Para a realização de validação nos controllers, temos duas formas de fazer. Uma delas é colocar a regra de validação dentro do método associado à ação de um componente com um botão ou link. Essa forma é fácil de fazer e não exige que criemos nenhum outro método. As listagens 5 e 6 apresentam respectivamente um trecho de código referente a um botão e um método com sua validação.

Listagem 5 - Exemplo de um botão associado ao método cadastrar do controller CadastroMBean.

 

Listagem 6 - Conteúdo do método cadastrar do controller CadastroMBean com validação.

Observe na Listagem 6, que para incluirmos as mensagens de validação, precisamos instanciar um objeto FacesMessage. Esse objeto encapsula o texto da mensagem e o tipo da mesma (erro, informação e aviso). Sempre que fizermos validações em métodos de ação será necessário instanciar objetos FacesMessage.

A outra forma de validar funcionalidades é criar métodos que possuam a assinatura definida na Listagem 7. Criar um método de validação dessa forma possibilitará utilizar o atributo validator, presentes nos componentes HTML do JSF, para associar uma regra de negócio a um campo do formulário. Vejamos como ficaria a mesma validação proposta no exemplo das listagens 5 e 6 se utilizássemos métodos associados aos campos do formulário. A Listagem 8 apresenta como ficaria o método para validação caso a pessoa já exista no banco de dados.

Listagem 7 - Assinatura dos métodos para validação associada a componentes.

 

Listagem 8 - Método para validação associada a um componente.

Observe na Listagem 8 que o método dispara uma exceção de validação (ValidatorException) caso já exista uma pessoa cadastrada no banco de dados com o mesmo CPF. Para que essa validação funcione, precisamos associar esse método de validação (validarPessoa) com o campo do formulário que receberá o CPF informado pelo usuário. A Listagem 9 apresenta essa associação realizada através do atributo validator.

Listagem 9 - Campo de texto associado ao método de validação definido na Listagem 8.

Com isso, ao submeter o formulário esse campo de CPF será validado pelo método validarPessoa.

E, então, você gostou das formas de validação com métodos? Qual das duas achou melhor? Por quê?

 

Validação usando componentes customizados

Seguimos agora para outra forma de validação imperativa a qual permite que criemos validadores customizados para nossas aplicações. A criação de validadores customizados é útil quando temos uma determinada validação para um campo que se repetirá em mais de um formulário. Por exemplo, suponha que você tenha um campo para e-mail na sua aplicação o qual é solicitado ao usuário em diversas páginas diferentes. Nesse cenário, criar um validador customizado permitirá a centralização das verificações dos e-mails válidos. Para criar um validador customizado, precisamos:

  1. Criar uma classe Java e anotá-la com @FacesValidator. A inclusão dessa anotação registra a classe como um validador JSF;
  2. Além de anotar a classe, é necessário que ela implemente a interface javax.faces.validator.Validator. Ao implementar essa interface, precisamos definir o método validate, que possui a assinatura: public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException;
  3. Na página JSF (xhtml), no componente a ser validado, precisamos incluir a tag validator, especificando o identificador do validador (validatorId).

Entendeu? As listagens 10 e 11, mostram respectivamente um simples validador de e-mail e sua utilização em um trecho de uma página JSF (xhtml).

Listagem 10 - Validador de e-mail.

 

Listagem 11 - Utilização do validador de e-mail em um campo JSF.

Versão 5.3 - Todos os Direitos reservados