• Nenhum resultado encontrado

Botão de Menus – <p:menuButton>

No documento Java Frameworks e Aplicações Corporativas (páginas 139-149)

Para se criar um Botão de Menu, usa-se o componente <p:menuButton>. Dentro, coloca-se componentes do tipo <p:menuitem> para as opções clicáveis. A tabela 6.16 mostra alguns atributos do Botão de Menu.

Atributo Descrição Tabela 6.15 Atributos de MenuBar. Figura 6.18 Exemplo de MenuBar.

JA VA – F ra m ew or ks e A pl ic aç õe s Co rp or at iv as

O codigo a seguir traz como exemplo a construção de um Botão de Menu com três itens, sendo que a figura 6.19 exibe o resultado da renderização desse código.

<p:menuButton value=”Options”>

<p:menuitem value=”Save” url=”/home.jsf” /> <p:menuitem value=”Update” url=”/home.jsf” /> <p:menuitem value=”Go Home” url=”/home.jsf” /> </p:menuButton> Options Save Update Go Home

Growl – <p:growl>

O componente <p:growl> é usado para apresentar mensagens em formato de notificações. As mensagens mostradas são as produzidas por FacesMessage e, portanto, funcionam como o <h:messages>.

Podemos também direcionar as mensagens como neste exemplo:

<p:messages for=“mensagens1” /> <p:growl for=“mensagens2” />

E no ManagedBean podemos usar:

FacesContext context =

FacesContext.getCurrentInstance(); context.addMessage(“mensagens1”, facesMessage1); context.addMessage(“mensagens1”, facesMessage2); context.addMessage(“mensagens2”, facesMessage3);

Nesse exemplo, facesMessage1 e facesMessage2 serão apresentados no <p:messages> e facesMessage3 no <p:growl>.

A figura 6.20 mostra como Growl é apresentado.

Teste de Mensagem Teste de Mensagem Figura 6.19 Exemplo de Botão de Menu. Figura 6.20 Exemplo de Growl.

e

7

Hibernate

Conhecer o Hibernate como ferramenta de mapeamento Objeto/Relacional em Java com JSF.

Mapeamento Objeto/Relacional; Ciclo de Vida de Persistência; Unidade de Trabalho; Contexto de Persistência; Estados, atributos transientes e interfaces do Hibernate.

Introdução

Hibernate é uma ferramenta de Mapeamento Objeto/Relacional em Java, isto é, transforma dados das tabelas em um grafo de objetos.

q

1 Ferramenta de Mapeamento Objeto/Relacional em Java; 1 Transforma dados das tabelas em um grafo de objetos; 1 Mascara o acesso ao banco, facilitando a interface com ele; 1 Aumenta a velocidade de desenvolvimento;

1 Mascara o uso de SQL;

1 Indicado para aplicações com uma modelagem rica de Objetos.

Um de seus principais objetivos é mascarar o acesso ao banco, facilitando a interface com ele, aumentando a velocidade de desenvolvimento, evitando o uso de SQL. Por suas caracte- rísticas e funcionalidades, é fortemente indicado para aplicações com uma modelagem rica de Objetos.

q

Basicamente o que se quer é transformar:

1 Um registro de uma tabela no banco de dados em Objeto do sistema; ou 1 Objetos do sistema em registros no BD.

Em geral, se pensa em:

obj

et

ivo

s

co

nc

ei

to

s

JA VA – F ra m ew or ks e A pl ic aç õe s Co rp or at iv as

q

Problemas podem ocorrer: 1 Herança;

1 Objetos com coleção de outros objetos. 1 Etc.

A figura 7.1 mostra uma correspondência simples. Veiculo

- String modelo - “Gol”; - String cor - ¨Preto”; - int ano - 2002;

Veiculo

- String modelo - “Uno”; - String cor - ¨Branco”; - int ano - 2005;

Veiculo

- String modelo - “Pálio”; - String cor - ¨vermelho”; - int ano - 2006; Modelo Cor tb_veiculo Ano Gol Preto 2002 Uno Branco 2005 Pálio Vermelho 2006

q

Para usar o Hibernate, precisa-se: 1 Banco de Dados.

2 Tabelas criadas.

1 Arquivo de configuração: hibernate.cfg.xml.

2 Contém referência para todas as classes persistentes. 1 Hibernate Session Factory.

2 Uma classe utilitária que retorna uma sessão para usar o hibernate. 1 Classes Persistentes.

2 Classes que serão mapeadas para tabelas.

Os passos para criação de um projeto Hibernate no Netbeans estão a seguir, adicionando esse Framework na criação do projeto, juntamente com a adição do Framework JSF.

q

1. Criar o Projeto, adicionando o framework Hibernate; 2. Criar HibernateUtil.java;

3. Criar Classe Persistente; 4. Criar Arquivo de Configuração; 5. Classe de Teste (Programa Principal).

Exercício de Fixação e

Acompanhar o passo a passo apresentado em sala de aula para criar um primeiro projeto utilizando o Hibernate no Netbeans. O código a seguir será utilizado no exercício e traz um exemplo de classe persistente e uma classe principal, sem usar ainda o JSF.

Os códigos a seguir apresentam um exemplo de classe persistente e um exemplo de classe

Figura 7.1

Exemplo de Correspondência Objeto-Relacional.

e package model; import javax.persistence.Entity; import javax.persistence.Table; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.SequenceGenerator; @Entity @Table(name=”tb_teste”) @SequenceGenerator(name=”sequencia”, sequenceName=”seq_id”) public class Pessoa {

private Long id; private String nome; public Pessoa() { }

@Id

@GeneratedValue(strategy=GenerationType.SEQUENCE, generator=”sequencia”) public Long getId() {

return this.id; }

public void setId(Long id) { this.id = id;

}

public String getNome() { return this.nome; }

public void setNome(String nome) { this.nome = nome; } } import org.hibernate.Session; import model.Pessoa; import util.HibernateUtil; public class Teste {

public static void main(String[] args) { Pessoa p = new Pessoa();

p.setNome(“João”);

Session session = HibernateUtil.

getSessionFactory(). openSession();

JA VA – F ra m ew or ks e A pl ic aç õe s Co rp or at iv as

Classe persistente

Uma classe persistente deve ser anotada para que seja devidamente utilizada pelo Hibernate.

q

As principais anotações são: 1 @Entity: indica que é persistente;

1 @Id: indica que uma propriedade é Primary Key; 1 @Table: indica a tabela correspondente;

1 @SequenceGenerator/@GeneratedValue: indicam atributos autoincrementáveis. Serão vistos em seção específica no decorrer do material.

O código a seguir implementa a classe persistente Aluno.java.

@Entity

@Table (name=”tb_aluno”)

@SequenceGenerator(name=”sequencia”, sequenceName=”seq_id”) public class Aluno {

private Long id; private String nome; public Aluno() { }

@Id

@GeneratedValue(strategy=GenerationType.SEQUENCE, generator=”sequencia”) public Long getId() {

return id; }

public void setId(Long id) { this.id = id; }

public String getNome() { return this.nome; }

public void setNome(String nome) { this.nome = nome;

} }

Essa classe pode estar relacionada à seguinte tabela, definida pelo seu DDL:

CREATE TABLE tb_aluno (

id integer NOT NULL, nome character varying(30), CONSTRAINT pk_id PRIMARY KEY (id)

)

CREATE SEQUENCE seq_id INCREMENT 1

MINVALUE 1

MAXVALUE 9223372036854775807 START 10

e

Acesso simples ao banco de dados: inserção e consulta

Para se fazer uma inserção em uma base de dados usando hibernate, deve-se seguir uma sequência simples de passos:

q

1. Cria-se um objeto (se não existir) de uma classe persistente; 2. Obtém-se a sessão hibernate corrente, ou abre-se uma nova; 3. Cria-se uma transação;

4. Salva-se o objeto;

5. Efetiva-se a transação (commit); 6. Fecha-se a sessão.

O código a seguir mostra os passos para inserção.

// Criação do objeto Aluno aluno = new Aluno(); aluno.setNome(nomeAluno);

// Obter sessão hibernate corrente

Session session = HibernateUtil.getSessionFactory() .openSession(); // Inicialização da transação session.beginTransaction(); // Salvamento do Objeto session.save(aluno); // Efetivação da transação session.getTransaction().commit(); session.close();

Para se fazer uma consulta, seguimos os seguintes passos:

q

1. Obtém-se a sessão hibernate corrente ou abre-se uma nova; 2. Cria-se uma transação;

3. Consulta-se a base via HQL ou Criteria; 4. Efetiva-se a transação (commit); 5. Fecha-se a sessão.

O código a seguir apresenta um exemplo de consulta.

// Obtem-se sessão corrente do hibernate

Session session = HibernateUtil.getSessionFactory() .openSession(); // Inicia-se a transação

session.beginTransaction();

// Efetua-se a consulta (aqui em HQL)

JA VA – F ra m ew or ks e A pl ic aç õe s Co rp or at iv as

Managed Bean e XHTMLs

Dependendo da arquitetura escolhida para o desenvolvimento do sistema, o acesso às classes anotadas pode ser feito de várias formas. Nesse material será mostrada a maneira mais simples, onde o Managed Bean possui um atributo do tipo da classe persistente e, em métodos específicos para acesso ao banco, essa classe é persistida ou recuperada, usando-se a API do Hibernate.

A seguir, é apresentado o Managed Bean AlunoMB, que gerencia os dados das telas.

@Named(value = “alunoMB”) @RequestScoped

public class AlunoMB { private Aluno aluno;

private List<Aluno> listaAlunos; public AlunoMB() {

}

@PostConstruct public void init() {

this.aluno = new Aluno(); }

Nesse MB, o método salvar() usa a API do Hibernate para salvar a classe persistente aluno que já está preenchida no MB.

public String salvar() {

// salva o aluno

Session session = HibernateUtil.getSessionFactory()

.openSession(); session.beginTransaction(); session.save(this.aluno); session.getTransaction().commit(); session.beginTransaction(); // lista todos os alunos

Query query = session.createQuery(“from Aluno”); this.listaAlunos = query.list(); session.getTransaction().commit(); session.close(); return “listar”; }

O método listar() busca todos os alunos da base e preenche a lista Alunos para ser mostrada no XHTML e redireciona para listar.xhtml.

e public String listar() {

Session session = HibernateUtil.getSessionFactory()

.openSession(); session.beginTransaction();

// lista todos os alunos

Query query = session.createQuery(“from Aluno”); this.listaAlunos = query.list(); session.getTransaction().commit(); session.close(); return “listar”; } // setters/getters public Aluno getAluno() { return aluno; }

public void setAluno(Aluno aluno) { this.aluno = aluno; }

public List<Aluno> getListaAlunos() { return listaAlunos; }

public void setAluno(List<Aluno> listaAlunos) { this.listaAlunos = listaAlunos; }

}

O indexemplo:xhtml é um formulário com dois botões. Quando o botão “Salvar” é pressionado, o método salvar() é invocado. Quando o botão “Listar” é pressionado, o método listar() é invocado. A seguir, o arquivo indexemplo:xhtml.

<h:body> <h:form>

Nome: <h:inputText value=”#{alunoMB.aluno.nome}” /> <h:commandButton action=”#{alunoMB.salvar()}” value=”Salvar” /> <h:commandButton action=”#{alunoMB.listar()}” value=”Listar” /> </h:form> </h:body>

A seguir o arquivo listar.xhtml, que apresenta todos os dados retornados pelo método listar().

JA VA – F ra m ew or ks e A pl ic aç õe s Co rp or at iv as <h:outputText value=”ID” /> </f:facet> #{a.id} </h:column> <h:column> <f:facet name=”header” > <h:outputText value=”NOME” /> </f:facet> #{a.nome} </h:column> </h:dataTable>

<h:link outcome=”index” value=”Início” /> </h:body>

Arquivo de Configuração: hibernate.cfg.xml

O arquivo hibernate.cfg.xml é o arquivo que contém as configurações de acesso ao banco de dados e informações sobre as classes que são persistentes. É um arquivo XML, onde tags específicas indicam informações como: banco de dados, usuário, senha, dialeto SQL etc. A seguir, um exemplo de arquivo hibernate.cfg.xml, que configura a conexão com um banco de dados.

<?xml version=’1.0’ encoding=’utf-8’?>

<!DOCTYPE hibernate-configuration PUBLIC “-//Hibernate/Hibernate Configuration DTD 3.0//EN” “http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”> <hibernate-configuration> <session-factory> <property name=”hibernate.connection.driver_class”> org.postgresql.Driver </property> <property name=”hibernate.connection.url”> jdbc:postgresql://localhost:5432/curso </property> <property name=”hibernate.connection.username”>postgres</property> <property name=”hibernate.connection.password”>postgres</property> <property name=”hibernate.connection.pool_size”>1</property> <property name=”hibernate.dialect”> org.hibernate.dialect.PostgreSQLDialect </property> <property name=”hibernate.current_session_context_class”> thread </property> <property name=”hibernate.cache.provider_class”> org.hibernate.cache.NoCacheProvider

e </property> <property name=”hibernate.show_sql”>true</property> <!-- Class Mapping --> <mapping package=”com.cursojava.model”/> <mapping class=”com.cursojava.model.Aluno”/> </session-factory> </hibernate-configuration>

No documento Java Frameworks e Aplicações Corporativas (páginas 139-149)