JSF – Combo utilizando f:selectItems

Neste post irei demonstrar a utilização do componente <f:selectItems>, que é componente responsávelpor popular os dados no componente <h:selectOneMenu>.

Utilizarei Tomcat, Hibernate e MySQL para a persistência de dados e disponilizarei o projeto para download.

Estrutura do projeto

Versões utilizadas

  • Eclipse 3.5.2
  • JDK 1.6
  • Tomcat 6.0.18
  • MyFaces 1.2.5
  • RichFaces 3.3.1
  • Hibernate Annotations 3.4.0
  • Hibernate 3.3.1
  • MySQL 5
  • MySQL Query Browser 1.2

Códigos

Pessoa.java:

package br.com.serjaum.modelo;

// import...

@Entity
@Table(name="PESSOA")
public class Pessoa implements Serializable {

 @Id
 @GeneratedValue(strategy=GenerationType.IDENTITY)
 @Column(name="PESSOA_ID")
 private Long id;

 @Column(name="NOME")
 private String nome; 

 @Column(name="EMAIL")
 private String email;

 @Column(name="SENHA")
 private String senha;

 @Column(name="CPF")
 private String cpf;

 @Temporal(TemporalType.DATE)
 @Column(name="DATA_NASC")
 private Date dataNascimento;

 @Column(name="TEL_CEL")
 private String telefoneCelular;

// gets/sets

 @Override
 public int hashCode(){
 return this.nome.length() * 23;
 }

 @Override
 public String toString(){
 return nome;
 }

 @Override
 public boolean equals(Object obj){
 if( (obj instanceof Pessoa) && ( ((Pessoa)obj).getCpf().equals(this.cpf)) ){
 return true;
 }else{
 return false;
 }
 }
}

PessoaMB.java:

package br.com.serjaum.mb;

// imports ...

public class PessoaMB implements Serializable {

 private static final long serialVersionUID = -333995781063775201L;

 private Pessoa pessoa = new Pessoa();

 public PessoaMB(){
 if(this.pessoa == null){
 this.pessoa = new Pessoa();
 }
 }

 public List<SelectItem> getPessoas(){
 PessoaFacade pessoaService = new PessoaFacadeImpl();

 List<Pessoa> pessoas = pessoaService.lista();

 List<SelectItem> itens = new ArrayList<SelectItem>(pessoas.size());

 for(Pessoa p : pessoas){
 itens.add(new SelectItem(p.getId(), p.getNome()));
 }

 return itens;
 }

 public Pessoa getPessoa() {
 return pessoa;
 }

 public void setPessoa(Pessoa pessoa) {
 this.pessoa = pessoa;
 }
}

Obs: O código em vermelho é responsável por buscar no banco todos os registros e iterar em um for populando a lista de SelectItem que preencherá nosso combo.

index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="StyleSheet" type="text/css" href="/jsf/style/estilos.css" media="screen" />
<script type="text/javascript" src="/jsf/resources/jquery.maskedinput-1.2.1.js"></script>
</head>

<body>
<f:view>
 <h:form>
 <h:messages />

 <h:outputLabel for="pessoa" value="Escolha " />
 <h:selectOneMenu value="#{pessoaMB.pessoa.id}">
 <f:selectItem itemValue="" itemLabel="Selecione..." />
 <f:selectItems value="#{pessoaMB.pessoas}" />
 </h:selectOneMenu>
 </h:form>
</f:view>
</body>
</html>

Importando o projeto

  1. Baixe o projeto completo >>aqui<<;
  2. Descompacte o projeto no seu workspace;
  3. No Eclipse vá em: File –> Import –> General – Existing Projects into Workspace –> Next –> Selecione o projeto descompactado no workspace –> Finish.

Criando o banco de dados

  1. Com o MySQL instalado e configurado com usuário: root e senha: root crie um novo schema com o nome de jsf.
  2. Execute a classe br.com.serjaum.util.GerarTabelas.java. Essa classe criará as tabelas que foram mapeadas no arquivo hibernate.cfg.xml, no caso a classe Rascunho terá uma tabela correspondente com o nome de rascunho no nosso banco de dados.

Resultado

Até o próximo post!


9 Comentários on “JSF – Combo utilizando f:selectItems”

  1. juniorsatanas disse:

    Otimo, so falta agora selectonmenu, salvando um relacionamento 1————–n e relatorio.. ai vc fez um sistema completo !

  2. Jackson William disse:

    Muito bem explicado o POST, muito obrigado me ajudou muito.
    Parabéns

  3. Muito bom o post, facinho de entender.

    Obrigado.

  4. Hermes disse:

    Valeu pelo post, como ficaria se eu quisesse pegar um valor de one menu para atualizar outro tipo pais e depois estados

  5. Reginaldo Lopes disse:

    Muito bom o post, porém tenho um combo usando rich:comboBox e não está mostrando a descrição e sim o ID, já subescrevi o método toString() e testei usando System.out.println(object); e funcionou, porém não mostra no combo. Pode me ajudar?

  6. George disse:

    Brother! Muito obrigado! Consegui fazer aqui! Valeu mesmo que Deus te abençoe grandemente (se você acreditar claro…) e que você continue compartilhando informações… rssr

    Valeu mesmo!

  7. Andrie disse:

    Vlw brother, ajudou bastante!😀

  8. Alex disse:

    Muito bom, me ajudou bastante, valeu

  9. Walter Junior disse:

    Se é muito gente boa, disponibiliza seus códigos fontes inteiros para ajudar, bacana da sua parte isso. Falow


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s