projeto webjava web crud com jsf prof fernando gomes 4 precisamos adicionar as libs do nosso...

32
Java Web CRUD com JSF Prof Fernando Gomes WWW.COTIINFORMATICA.COM.BR 1 PROJETO WEB: Este projeto faz o cadastro de Clientes numa tabela do MySQL e, em uma única página JSF, mostra um formulário de cadastro de Cliente, lista os clientes cadastrados com paginação, e permite que os registros de clientes sejam alterados ou excluídos. Estrutura do projeto depois de finalizado:

Upload: others

Post on 19-Jul-2020

32 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 1

PROJETO WEB: Este projeto faz o cadastro de Clientes numa tabela do MySQL e, em uma única página JSF, mostra um formulário de cadastro de Cliente, lista os clientes cadastrados com paginação, e permite que os registros de clientes sejam alterados ou excluídos. Estrutura do projeto depois de finalizado:

Page 2: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 2

Para criar esse projeto: Clicar no menu File -> New -> Dynamic Web Project

Page 3: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 3

Feito isso, clicamos em Next na próxima tela, e chegamos na tela abaixo, onde devemos marcar a opção Generate web.xml deployment descriptor. Depois clicamos em Finish.

Page 4: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 4

Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER.

Todo o conteúdo do diretório PrimeFaces 5.0, para habilitar o uso do Primefaces e de seus temas;

mysql-connector-java-5.1.23-bin.jar do diretório Mysql-5.1.23, para habilitar o uso do MySQL via Driver JDBC.

Vamos criar 3 pacotes: control, persistence e entity, onde vamos ter as classes do nosso sistema. Para criar um novo pacote clique em Java Resources e depois, clique com o botão direito em src [abaixo de Java Resources].

Page 5: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 5

Depois escolha New -> Package.

Page 6: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 6

Dê o nome control e clique em Finish.

Page 7: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 7

Depois, repita o processo para os outros pacotes.

Page 8: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 8

No pacote persistence, precisamos criar o script de criação do Banco de Dados. Para criar o script, clicamos com o botão direito no nome do pacote persistence e selecionamos New -> Other.

Page 9: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 9

Escolhemos “File” e clicamos Next. Na tela seguinte, damos o nome script.sql e clicamos em Finish.

Page 10: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 10

Page 11: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 11

script.sql create database bdUM; use bdUM; create table cliente(id int primary key auto_increment, nome varchar(50), email varchar(50) unique); insert into cliente (id, nome, email) values (null, 'fernando', '[email protected]'), (null, 'lu', '[email protected]'), (null, 'ju', '[email protected]'), (null, 'belem', '[email protected]'); Apenas uma tabela: id é chave primária inteiro auto incrementável; nome tem tamanho 50 e email 250 e precisa ser único. ________________________________________________________________ Agora, precisamos criar os DAOs, que vão viabilizar a comunicação com o banco de dados para as operações básicas de busca, inserção e alteração na tabela cliente.

DAO.java package persistence; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; public class Dao { Connection con; PreparedStatement stmt; ResultSet rs; public void open() throws Exception {

Page 12: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 12

Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bdUM ", "root", ""); } public void close() throws Exception { con.close(); } } Um DAO tipicamente utiliza 3 objetos:

Connection con; PreparedStatement stmt; ResultSet rs; E utiliza dois métodos: open() e close() – ambos precisam lançar exceção, para podermos saber se houve algum problema na conexão com o banco de dados. No método open(), primeiro, o DAO carrega o Driver do MySQL:

Class.forName("com.mysql.jdbc.Driver"); Em seguida, passa para o objeto con a conexão com o banco de dados.

con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bdUM", "root", ""); O método close() apenas encerra a conexão com o banco de dados. Os dois outros objetos declarados e o próprio objeto con vão ser utilizados na classe ClienteDao que herda Dao.

Page 13: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 13

Precisamos construir a classe ClienteDao, que vai herdar Dao e utilizar-se dos métodos open e close. A classe ClienteDao também vai utilizar os objetos da classe Dao para fazer acesso ao banco de dados.

ClienteDao.java package persistence; import java.util.ArrayList; import java.util.List; import entity.Cliente; public class ClienteDao extends Dao { public void create(Cliente c) throws Exception { open(); stmt = con.prepareStatement("insert into cliente values (null,?,?)"); stmt.setString(1, c.getNome()); stmt.setString(2, c.getEmail()); stmt.execute(); close(); } public List<Cliente> findAll() throws Exception { open(); stmt = con.prepareStatement("select * from cliente order by id desc"); rs = stmt.executeQuery(); List<Cliente> lista = new ArrayList<Cliente>(); while (rs.next()) { Cliente c = new Cliente(); c.setId(rs.getInt(1)); c.setNome(rs.getString(2));

Page 14: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 14

c.setEmail(rs.getString(3)); lista.add(c); } close(); return lista; } public Cliente findByCode(Integer cod) throws Exception { open(); stmt = con.prepareStatement("select * from cliente where id=?"); stmt.setInt(1, cod); rs = stmt.executeQuery(); Cliente c = null; if (rs.next()) { c = new Cliente(); c.setId(rs.getInt(1)); c.setNome(rs.getString(2)); c.setEmail(rs.getString(3)); } close(); return c; } public void delete(Integer cod) throws Exception { open(); stmt = con.prepareStatement("delete from cliente where id = ?"); stmt.setInt(1, cod); stmt.execute(); close(); } public void update(Cliente c) throws Exception {

Page 15: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 15

open(); stmt = con.prepareStatement("update cliente set nome = ?, email = ? where id = ?"); stmt.setString(1, c.getNome()); stmt.setString(2, c.getEmail()); stmt.setInt(3, c.getId()); stmt.execute(); close(); } } ClienteDao possui 5 métodos: findAll, findByCode, create, delete e update. Dois [create e update] recebem um objeto da classe Cliente como parâmetro, dois [delete e findByCode] recebem um Integer que corresponde ao id do cliente, e um método [findAll] não recebe parâmetro nenhum. Todos os métodos lançam exceção porque precisamos saber se houve algum problema na comunicação ou na execução de instruções no banco de dados. O método update abre a conexão com o banco da dados, e utiliza o objeto stmt para criar o comando SQL de update na tabela cliente. O update é feito pelo comando SQL que atualiza nome e/ou email de um cliente cujo id é passado pela página JSF onde se encontra o botão "Atualizar", como veremos adiante. Feito o update, a conexão com o banco de dados é fechada através de uma chamada do método close. O método findAll() não recebe parâmetros. Abrimos a conexão com o banco de dados, através da chamada do método open; utilizamos o objeto stmt para preparar o comando SQL select * from cliente order by id desc na tabela cliente; este comando recupera todos os registros da tabela cliente; a ordem decrescente por id permite que visualizemos os registros mais recentes primeiro; recebemos o resultado da busca no objeto rs; e instanciamos uma lista de objetos da classe Cliente com os dados recuperados da tabela cliente. Retornamos essa lista e fechamos a conexão com o banco de dados. O método findByCode recebe um Integer com o id do cliente e executa praticamente o mesmo q o método findAll - a diferença é que retorna apenas um objeto da classe Cliente e não uma lista. [Este método não vai ser utilizado no nosso projeto, foi descrito aqui apenas para ilustrar como seria sua construção.]

Page 16: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 16

o método create recebe um objeto da classe Cliente e o envia para o banco de dados, criando mais um registro na tabela clientes. Detalhe, o id precisa ser null porque o próprio MySQL já atribui um novo valor ao id, a cada registro inserido. O método delete recebe um Integer que corresponde ao id do registro do cliente na tabela de clientes e exclui esse registro da tabela. ________________________________________________________________ Criado o pacote entity, criamos a classe Cliente. Essa classe deve ser Serializável. Serialização em Java é o processo que permite que um objeto seja transformado em uma sequência de bytes, e é útil quando precisamos enviar objetos pela rede, salvar no disco, ou quando utilizamos Data Access Objects [DAO] e JDBC para interagir com Bancos de Dados.

Cliente.java package entity; import java.io.Serializable; public class Cliente implements Serializable { private static final long serialVersionUID = 1L; private Integer id; private String nome; private String email; public Cliente() { } public Cliente(Integer id, String nome, String email) { this.id = id; this.nome = nome; this.email = email; }

Page 17: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 17

@Override public String toString() { return "Cliente [id=" + id + ", nome=" + nome + ", email=" + email + "]"; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } } Agora, precisamos criar o ManagedBean que irá receber, via formulário html, os dados para criação, alteração, consulta e exclusão de registros da tabela cliente. No pacote control, criamos a classe ControlBean.

Page 18: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 18

ControlBean.java package control; import java.io.Serializable; import java.util.List; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; import javax.faces.context.FacesContext; import entity.Cliente; import persistence.ClienteDao; @ManagedBean(name = "mb") @RequestScoped public class ControlBean implements Serializable { private static final long serialVersionUID = 1L; private Cliente cliente; private List<Cliente> clientes; public List<Cliente> getClientes() { try { clientes = new ClienteDao().findAll(); } catch (Exception e) { e.printStackTrace(); } return clientes; } public void setClientes(List<Cliente> clientes) { this.clientes = clientes; }

Page 19: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 19

{ cliente = new Cliente(); } public ControlBean() { } public Cliente getCliente() { return cliente; } public void setCliente(Cliente cliente) { this.cliente = cliente; } public void gravar() { FacesContext fc = FacesContext.getCurrentInstance(); try { new ClienteDao().create(cliente); cliente = new Cliente(); fc.addMessage("form1", new FacesMessage("Dados Gravados!!!")); } catch (Exception e) { fc.addMessage("form1", new FacesMessage("Erro: " + e.getMessage())); } } public void excluir() { FacesContext fc = FacesContext.getCurrentInstance(); try { new ClienteDao().delete(cliente.getId()); cliente = new Cliente(); fc.addMessage("form2", new FacesMessage("Registro Excluído!!!")); } catch (Exception e) { fc.addMessage("form2", new FacesMessage("Erro: " + e.getMessage()));

Page 20: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 20

} } public void alterar() { FacesContext fc = FacesContext.getCurrentInstance(); try { new ClienteDao().update(cliente); cliente = new Cliente(); fc.addMessage(null, new FacesMessage("Dados Alterados!!!")); } catch (Exception e) { fc.addMessage(null, new FacesMessage("Erro: " + e.getMessage())); } } } A classe ControlBean tem 2 anotações: @ManagedBean(name = "mb") - essa anotação diz que a classe é um ManagedBean, ou seja, é um JavaBean gerenciado pelo framework JSF. Também associa o nome mb a essa classe. É através do nome mb que as páginas JSF vão fazer acesso aos métodos dessa classe. @RequestScoped - essa anotação diz que o escopo de um objeto da classe ControlBean é o escopo Request, ou seja, uma vez atendida a requisição feita pela página JSF, o contexto enviado ao ManagedBean e o contexto enviado como resposta não são mantidos no servidor, por exemplo, como variáveis de sessão. ControlBean precisa ser uma classe Serializável. Vamos construir apenas seu contrutor vazio. ControlBean possui 2 atributos apenas - uma lista de Clientes e um objeto da classe Cliente. Porque o ControlBean vai fazer acesso aos métodos de ClienteDao e retornar, para a página JSF, exatamente o que retorna o ClienteDao. E ClienteDao só retorna um objeto da Classe cliente ou uma lista de Clientes. Criamos o bloco anônimo abaixo:

{

Page 21: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 21

cliente = new Cliente(); } Esse bloco anônimo é necessário para inicializarmos um objeto da classe Cliente sempre que ControlBean receber uma solicitação via formulário html. Não inicializamos a lista de clientes porque nunca vamos receber uma lista de clientes como parâmetro. Criamos os getters e setters para a classe ControlBean. No método getClientes(), instanciamos a lista de clientes de ControlBean com a lista de clientes retornada pelo método findAll() de ClienteDao, porque já sabemos que é a única possibilidade de ClienteDao retornar uma lista de clientes. A chamada ao método findAll() é feita dentro de um bloco try/catch porque precisamos saber se houve alguma falha ou exceção na comunicação entre ControlBean e ClienteDao. O método gravar() cria um objeto da Classe FacesContext, recebe os dados da página JSF, e instancia o objeto cliente - atributo da classe ControlBean com os dados recebidos. FacesContext contém o contexto da nossa aplicação de acordo com as requisições e respostas feitas ao ManagedBean e gerenciadas pelo framework JSF. Esse contexto é o estado de nossa aplicação e é alterado a cada requisição/resposta feita via página JSF. Dentro de um bloco try/catch, o método gravar chama o método create de ClienteDao, feita a gravação, "zera" o objeto cliente instanciando esse objeto com new Cliente(), e envia para a página JSF a mensagem "Dados Gravados!!!" via Expression Language. Precisamos "zerar" o objeto cliente para o formulário da página JSF não receber de volta os dados enviados - dessa forma, o formulário aparece em branco depois de feita a gravação do cliente. Os métodos alterar e excluir funcionam exatamente da mesma maneira que o método gravar. A única diferença é que no método alterar, a Expression Language enviada não está associada a nenhuma mensagem específica na página JSF, veremos porque mais adiante.

Page 22: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 22

Antes de criarmos a página JSF de nosso sistema, precisamos habilitar o JSF. Primeiro clique com o botão direito no projeto e selecione Properties.

Page 23: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 23

Depois, clique em Java Server Faces e em seguida, clicamos em Further Configuration Available...

Page 24: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 24

Na tela seguinte, deixamos marcada a opção Disable Library Configuration, e adicionamos *.jsf na caixa de texto URL Mapping Patterns. Se essa caixa de texto estiver com algum conteúdo, selecionamos e apagamos, para adicionar *.jsf, clicamos em add e digitamos *.jsf na tela seguinte.

Também precisamos adicionar algumas linhas no web.xml para habilitarmos o tema que vamos utilizar em nosso projeto. Em web.xml, acima da tag <servlet>, adicionamos as linhas abaixo:

<context-param> <param-name>primefaces.THEME</param-name> <param-value>cupertino</param-value> </context-param> No caso, selecionamos o tema cupertino. Para mais temas, acesse: https://www.primefaces.org/themes/

Page 25: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 25

Finalmente, precisamos criar a página JSF do nosso sistema. Devemos criar uma página XHTML que irá conter as tags que o framework JSF irá utilizar para renderizar a página JSF. No navegador, vamos ver uma página JSF sendo exibida, mas trabalhamos com um arquivo XHTML. Para criar uma nova página XHTML, repetimos o que foi descrito no início desse documento, para a criação do arquivo script.sql. Clicamos com o botão direito em WEB-INF, dentro de WebContent [veja a imagem "Estrutura do projeto depois de finalizado" na 1ª página desse documento], depois selecionamos New -> Other; Na tela seguinte digitamos HTML onde digitamos File quando criamos script.sql; A opção HTML File irá aparecer, então selecionamos e clicamos Next; Na tela seguinte damos nome o nome sistema ao arquivo e renomeamos sua extensão para .xhtml, depois clicamos Next;

Page 26: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 26

Na tela seguinte, escolhemos a primeira opção [conforme mostrado abaixo] e clicamos finish.

No arquivo criado, apagamos todas as TAGS "ui" geradas, dessa forma ficamos apenas com as tags DOCTYPE e html. A partir daí, criamos o nosso arquivo XHTML.

Page 27: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 27

sistema.xhtml <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui"> <h:head></h:head> <h:body> <p:panel header="CRUD com JSF"> <h:form id="form1"> <p:panelGrid columns="5"> <h:outputText value="Nome" /> <p:inputText value="#{mb.cliente.nome}" required="true" /> <h:outputText value="Email" /> <p:inputText value="#{mb.cliente.email}" required="true" /> <p:commandButton value="Gravar" action="#{mb.gravar}" update=":form1,:form2" ajax="true"> </p:commandButton> </p:panelGrid> <p:message for="form1" /> <p:growl></p:growl> </h:form> </p:panel> <p:panel header="Consultar Cliente"> <h:form id="form2"> <p:dataTable value="#{mb.clientes}" var="linha" paginator="true" rows="4"> <p:column headerText="id"> <h:outputText value="#{linha.id}" /> </p:column>

Page 28: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 28

<p:column headerText="nome"> <h:outputText value="#{linha.nome}" /> </p:column> <p:column headerText="email"> <h:outputText value="#{linha.email}" /> </p:column> <p:column headerText="Operacao" style="text-align:center;"> <p:commandButton value="Excluir" action="#{mb.excluir}" ajax="true" update=":form1,:form2"> <f:setPropertyActionListener value="#{linha}" target="#{mb.cliente}"></f:setPropertyActionListener> </p:commandButton> <p:commandButton value="Alterar" onclick="PF('dlg2').show();" update=":form3" ajax="true"> <f:setPropertyActionListener value="#{linha}" target="#{mb.cliente}"></f:setPropertyActionListener> </p:commandButton> </p:column> </p:dataTable> <p:message for="form2" /> <p:growl></p:growl> </h:form> <p:dialog header="Alterar Cliente" widgetVar="dlg2" modal="true" hideEffect="fade" height="200"> <h:form id="form3"> <p:panelGrid columns="2"> <h:outputText value="Nome" /> <p:inputText value="#{mb.cliente.nome}" required="true" /> <h:outputText value="Email" /> <p:inputText value="#{mb.cliente.email}" required="true" /> <p:inputText value="#{mb.cliente.id}" type="hidden" /> <p:commandButton value="Alterar Dados" action="#{mb.alterar}"

Page 29: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 29

update=":form1,:form2" ajax="true" onclick="PF('dlg2').hide();"> </p:commandButton> </p:panelGrid> <p:growl></p:growl> </h:form> </p:dialog> </p:panel> </h:body> </html> Na tag html, além dos mapeamentos gerados, precisamos incluir o mapeamento xmlns:p="http://primefaces.org/ui para podermos utilizar as tags do primefaces. A página é dividida em dois paineis, o primeiro tem o formulário de cadastro de cliente. Os campos do formulário contém os dados que vão instanciar o objeto da classe Cliente utilizado no ManagedBean ControlBean. O 1º formulário possui um botão que quando clicamos, ele envia os dados para o método gravar, do ManagedBean: action="#{mb.gravar}" Em resposta, a página recebe a mensagem de Dados Gravados, ou de erro, via Expression Language e ainda exibe essa mesma mensagem num pop up - a primeira tag abaixo assinala onde irá aparecer a mensagem, logo abaixo do form de cadastro de cliente; a segunda tag abaixo assinala que a mensagem irá aparecer em um pop up: <p:message for="form1" /> mensagem via expression language <p:growl></p:growl> mesma mensagem em pop up Porque zeramos o objeto cliente após o cadastro, o formulário aparece em branco. No segundo painel da página, o cliente cadastrado aparece no topo da lista paginada, porque ordenamos a query de findAll, em ClienteDao, para exibir os dados por ordem decrescente de id. * * *

Page 30: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 30

O Segundo painel da página mostra os clientes cadastrados numa lista paginada e contém os botões de alteração e exclusão de clientes. No caso de alteração de cliente, o sistema abre uma caixa de diálogo, onde os dados do cliente são mostrado e podem ser alterados. Essa caixa de diálogo está na tag <p:dialog header="Alterar Cliente" widgetVar="dlg2" modal="true" hideEffect="fade" height="200"> Quando damos o submit no formulário com os dados alterados, a caixa de diálogo se fecha, e a lista de clientes aparece modificada. Como a alteração de cliente foi feita em uma caixa de diálogo, a mensagem de Dados Alterados apenas aparece em pop up porque a caixa se fecha assim que damos submit. Note que todos os botões commandButton de todos os formulários possuem o atributo ajax="true" e todos esses botões comandam a atualização de algum formulário da página. Dessa forma, todo evento disparado por todo botão automaticamente reflete uma mudança nos dados exibidos.

Tela do sistema ao iniciar

Page 31: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 31

Cadastro de cliente

Cadastro realizado com sucesso

Page 32: PROJETO WEBJava Web CRUD com JSF Prof Fernando Gomes 4 Precisamos adicionar as LIBs do nosso projeto. Elas se encontram no nosso COTIJAVADRIVER. Todo o conteúdo do diretório PrimeFaces

Java Web

CRUD com JSF

Prof Fernando Gomes

WWW.COTIINFORMATICA.COM.BR 32

Alteração de cliente [nome alterado]

Alteração realizada com sucesso