Olá desenvolvedores, na sexta parte da série de tutoriais sobre combos dependentes criaremos um “converter” para converter o objeto selecionado na tela em um objeto da Entidade Pessoa e assim podermos gravar a cidade selecionada no banco de dados.

Desse modo criaremos um “converter” para cada um componente “h:SelectOneMenu”. Quando os dados são enviados do servidor para a tela, eles são enviados como String, exceto o ‘ID”, que foi declarado sendo do tipo “Long” no momento da sua criação. Assim, quando a ação de salvar o formulário é disparada, ocorre uma tentativa de conversão do código HTML que está no navegador para um objeto.

Em outras palavras ocorre uma tentativa de converter em objeto o código do Estado ou da cidade, para atribuí-lo ao objeto pessoa, e então salvar. É exatamente isso que o conversor que iremos implementar terá que fazer. Fazer com que quando o código for da tela para o servidor, o objeto seja carregado no banco de dados e então retornar um objeto. Esta última parte é definida dentro do “converter”.

CONVERTER PARA O ESTADO

Começaremos criando um “package br.com.converter”, dentro do “package” crie uma classe e atribua a ela o nome de EstadoConverter. Para que o JSF – JavaServer Faces possa reconhecer automaticamente e executar os métodos do “converter” a classe precisa ser precedida da anotação @FacesConverter informando a classe que dever ser “convertida”. A classe implementa ainda a interface Converter do pacote “javax.faces.convert”, bem como implementa ainda a interface Serializable.

getAsObject

A classe pedirá que alguns métodos próprios sejam adicionados, adicione-os, clicando no ícone da lâmpada a esquerda >> Add unimplemented methods. Analisando os métodos adicionados perceba que o método getAsObject é o método que recebe um objeto, e que com parâmetro recebe o FacesContent e os componentes do JSF, e também uma String que é o código do Estado.

Quando a ação de salvar é disparada o “getAsObject” é chamado vindo da tela apenas o código do Estado, então devemos fazer com que um objeto seja retornado. O nosso primeiro passo é a consulta a base de dados por meio do “entityManager” por meio do qual também iniciamos e “startamos” uma transação.

E então passando a classe e a primary key ao objeto estado buscaremos o código do Estado e por fim retornando o objeto estado.

getAsString

E o método “getAsString” que retorna o código em String e que é executado quando o objeto é enviado do servidor para a tela receberá os mesmo dois primeiros parâmetros do método anterior, porém como terceiro parâmetro receberá o estado.

No entanto, no retorno será preciso fazer uma conversão de “casting”, convertendo o objeto genérico do parâmetro para um objeto Estado. E assim podemos obter o “id”, porém, deveremos convertê-lo em uma String por meio do “toString.

Proceda da mesma forma para as cidades, crie dentro do “package br.com.converter” a classe CidadesConverter fazendo um cópia da classe EstadosConverter. E apenas substitua “Estados por Cidades” e “estados por cidades”, atentando para onde deve colocar maiúsculas ou minúsculas.

EM POUCAS PALAVRAS

Neste tutorial criamos classes Converter para o Estado e Cidades, precisaremos ainda de alguns ajustes para podermos gravar as cidades na base de dados, é o que faremos no próximo tutorial.