Olá desenvolvedores, dando sequência a implementação de combos dependentes, neste tutorial nos concentraremos no método para carregar o combo de Estados. Começaremos pela interface IDaoPessoa onde declararemos uma lista do objeto SelectItem.

List<SelectItem> IistaEstados();

Após salvar, note que a implementação IDaoPessoaImpl pede a implementação do método. Onde teremos instanciada uma lista vazia do <SlectItem>.

No escopo do método carregaremos uma lista de “Estados” que será carregada a partir do banco de dados. Assim, o primeiro passo é dar início a transação.

Dessa forma, agora poderemos implementar o carregamento da lista com o nome dos Estados.

List<Estados> estados =  entitymanager.createQuery(“from Estados”).getResultList();

O próximo passo é a criação de forEach de “Estados”, em que um novo <SelectItem> deverá ser criado em seu escopo. Assim, iniciaremos o <SelectItem> e passaremos para ele o “objeto inteiro”.

No entanto, além desse objeto inteiro deverá ser passado ao <SelectItem> que foi iniciado, uma label (estado.getNome). Esta label carrega o que será exibido em tela para o usuário, isto é, o nome do Estado. No fim do processamento do método, será retornada a lista de SelectItem.

Recapitulando, a lista foi instanciada e a transação iniciada, então uma consulta da lista de Estados foi realizada na base de dados. No entanto, foi preciso transformar a lista em algo que o componente JSF – JavaServer Faces, que a receberá possa compreender. Após isso, retornamos a lista.

MANAGEDBEAN

Agora no ManagedBean PessoaBean é preciso criar novamente a lista de <SelectItem>, cujos itens a serem escolhidos serão os “Estados”.

private List<SelectItem> estado;

Ainda no escopo do ManagedBean, obteremos os “Estados”, onde chamaremos o método listaEstados(). Iremos apontar para o JSF a variável “estado”, assim ele irá automaticamente chamar o getEstados, e desse modo será realizada a consulta no banco de dados e o dado será retornado para a tela.

INTERFACE

Na primeirapagina.xhtml implementaremos a interface do combo de dependentes com o usuário. Escolha na sua página o local que fizer mais sentido para você. Como sempre começamos com o componente identificador do campo h:outputLabel. E para carregar os “Estados” e exibir em tela, o h:selectOneMenu, que renderiza um elemento de entrada HTML do tipo “select”.

Neste componente a propriedade value irá apontar para o objeto “Estados” que receberá o valor quando selecionarmos.

Este objeto estado deverá ser criado, para que o “Estado” selecionado na tela possa ser posteriormente recuperado. E assim conseguirmos carregar a cidade de acordo com o Estado selecionado. Dessa forma precisamos criar esse objeto temporário na Entidade Pessoa, gerando também para ele os métodos Getters and Setters.

Este objeto não precisa ser gravado pelo Hibernate, deverá apenas permanecer em memória. Assim, para manter o objeto apenas me memória o atributo deverá ser anotado com o @Transient.

@Transient
private Estados estados;

Agora sim, voltando para a primeirapagina.xhtml, a propriedade value apontará para este objeto temporário. Para chamar os valores criados na base de dados usaremos o componente f:selectItems que apontará para o getEstados() do PessoaBean.

EM POUCAS PALAVRAS

Neste tutorial implementamos toda a parte estrutura do ManagedBean e de consulta ao banco de dados. E já conseguimos fazer com que nossa aplicação carrega os Estados. O próximo passo é fazer com que ao selecionar um dado Estado, as cidades sejam carregadas em um outro combo.