Java Server Faces: Métodos de Validação (Introdução)

 

Eu poderia iniciar logo falando sobre os métodos de validação do Java Server Faces (JSF) mas acho interessante responder ou pelo menos tentar esclarecer um pouco questões da orientação objeto e da  tecnologia Java Beans antes de colocarmos a mão na massa.

 

O que são JavaBeans  ?

JavaBeans são classes javas que seguem algumas convenções :

l  Devem possuir um construtor sem parâmetros , você pode satisfazer esse requerimento,  omitindo todos os métodos construtores de sua classe ou definindo o construtor sem a passagem de parâmetros.

l  Não podem possuir variáveis(campos)  públicos, em resumo não pode haver acesso direto ao campos, ao invés disso deve ser feito uso de métodos assessores.

l  A Persistência de dados deve ser feita através de métodos Getters e Setters, ou seja se a classe possuir um método getNome ela retornara uma String pois provavelmente o campo definido na classe sera do tipo String, em caso de valores do tipo Boleanos, é o utilizado a sintaxe isXxx  invés de getXxx.

 

ex:

Ao invés de declararmos:

 

      public double speed;

 

Devemos usar:

 

      // Declaramos o atributo speed como privado

      private double speed;

 

 

      // Método Get que irá retornar o valor do atributo speed

      public double getSpeed()

      {

      return speed);

      }    

 

      // Metódo set que irá armazenar em speed

      public void setSpeed(double newSpeed)

       {

      speed = newSpeed;

      }

 

Para informações sobre beans é aconselhável uma visita a : http://java.sun.com/beans/docs/

 

E o que são Construtores ?

Um método construtor é chamado sobre um objeto no momento em que este é criado, ao contrário de outros métodos ele não pode ser chamado diretamente, eles servem para definir valores iniciais para variáveis(atributos) de instância, eles sempre têm o mesmo nome da classe que fazem parte, não tem nenhum tipo de retorno, não fazem uso da instrução return.

 

ex:

      class Carro {

      // Atributos(varíaveis)

      String marca

      int ano

      //Método construtor

      Carro(String m, int a){

      marca = a;

      ano = b;

      }

      }

 

Feito isso quando criarmos uma instância de Carro, faremos da seguinte maneira:

 

Carro fusca = new Carro(“fusca”,1985);

 

Com isso a variável marca assumiria o valor da String fusca e a variável ano seria 1985.

 

Porque não usar atributos(campos) Públicos ?

É importante manter atributos públicos em situações em que uma outra classe possa causar danos, alterando a variável de um modo impróprio, ou ainda se uma variável não vai ser utilizada por outras classes.

 

Um bom exemplo a disso é no seu sistema haver uma classe que gere notas fiscais e que possuas um variável que armazena um campo de desconto, se esse campo não for privado, e puder ser livremente alterada por outra classe, o seu sistema poderá de uma hora por outra estar dando um desconto maior do que o que deveria ser estipulado.

 

E os Managed Beans são Beans que usamos em aplicações em JSF ?

Managed Beans tambem chamados de Backbeans são classes simples que não herdam métodos e nem atributos de outras classes e não implementam obrigatoriamente nenhuma interface, mas seguem algumas convenções do padrão JavaBean e por isso implementam métodos getters and setters.

Eles também implementam métodos. a seguir iremos explorar os métodos de validação(Validation methods).

 

Os Managed Beans são instanciados e guardam propriedades e valores através de escopos do tipo:

l  Session (ex: sessionBean)

l  Request (ex: requestBean)

l  Application (ex: applicationBean)

 

Como funcionam esses escopos ?

Antes de criar um bean é necessário determinar  qual escopo será apropriado, isso porque aplicações web são acessadas por vários usuários ao mesmo tempo, por isso é importante  você escolher o menor escopo possível para com isso obter o melhor uso dos recursos do servidor.

 

Application Scopes – Permanecem ativos até que o servidor pare a execução do aplicativo, sendo que os valores no application bean permaneceram disponíveis para todas a sessões e requisições.

 

Session Scopes – Começam quando o usuário faz o seu primeiro acesso e finalizam-se quando a sessão se encerra por iniciativa do usuário ou por desconexão automática após um determinado tempo de inatividade ou ainda quando a aplicação web faz isso utilizando a chamada session.invalidate().

 

Request Scopes -  Ocorrem quando o usuário submetem uma formulário e encerram-se quando a resposta é enviada ao mesmo.

 

Métodos de Validação (Validation Methods)

Existem dentre varias coisas que praticamente todas as aplicações tem a obrigação de implementar,  duas que são regra para quase todas os aplicativos tanto web quanto desktop, com certeza é imprescindível que se efetue :

 

A checagem de todos os campos para verificar se os valores foram digitados corretamente ou pelo menos se  campos obrigatórios  foram preenchidos.

 

Após a  checagem caso encontrado valores que não atendam os padrões especificados para a validação na aplicação, deve então ser exibido uma tela ou formulário informando o erro e solicitando a sua correção.

 

Tipos de Métodos de Validação (Validation Methods)

 

Validação Manual

Faz a validação dos campos nos métodos Setters ou no Action Controller, usando Strings como propriedade dos beans e retornando null quando necessário mostrar novamente o formulário para uma nova tentativa de submissão do mesmo após a correção do valor fornecido pelo usuário.

 

Esse tipo de validação ocorre quando a lógica da aplicação está completamente atada à lógica de negócio ou ainda quando se é necessário checar interações complexas entre os campos.

 

Validação Automática Implícita Ou por Conversão de Tipos

 

Enquanto na validação manual  são utilizadas Strings, no Validação automática implícita os valores podem ser int, double, etc. Nesse método de validação é utilizado o a tag h: message para mostrar a mensagem de erro de um  campo específico, quando houver um erro de validação.

 

Esse tipo é simples e útil quando necessitamos fazer a checagem vários os tipos de dados de vários inputs fields.

 

Validação Automática explicita

Neste tipo de validação usa-se as tags :

 

<f:convertNumber/>;

<f:convertDateTime/>;

<f:validateLength/>;

<f:validateDoubleRange/>;

<f:validateLongRange/>

 

e para a aplicação exibir uma mensagem de falha, também é feito o uso da tag:

 

 <h:message/>.

 

Métodos de Validações Customizados

Neste tipo de validação você mesmo cria um FacesMessage associado a um mecanismo ValidatorException.

 

Na próxima parte deste artigo veremos alguns exemplos práticos de validações e nos aprofundaremos nas vantagens e desvantagens de cada um delas.