JSF – Combo utilizando t:selectItems

Neste post irei demonstrar a utilização do componente <t:selectItems>, que é componente responsável por 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
  • Tomahawk 1.1.8
  • 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 Pessoa pessoa = new Pessoa();

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

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

 return pessoaService.lista();
 }

 public Pessoa getPessoa() {
 return pessoa;
 }

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

Importante: A diferença fundamental entre o componente <f:selectItems> e o <t:selectItems> é que o segundo não precisa receber uma lista de SelectItem, simplificando a utilização do componente, pois enviamos uma lista com o tipo original do objeto (no caso, uma lista de Pessoa) e o componente se encarrega em popular o 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"%>
<%@ taglib prefix="t" uri="http://myfaces.apache.org/tomahawk"%>
<!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..." />
<t:selectItems value="#{pessoaMB.pessoas}" var="p" itemLabel="#{p.nome}" itemValue="#{p.id}"/>
</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!


One Comment on “JSF – Combo utilizando t:selectItems”

  1. juniorsatanas disse:

    Do CRUD até agora esse blog vem abrindo portas para jsf + ricfaces, parabéns …

    * RELATÓRIOS
    * FILTRO
    * CADASTRO COM RELACIONAMENTO MESTRE DETALHES

    Com isso tu mata todos os cursos do Brasil.

    Abraço e valeu

    juniorsatans 666


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