CREATE TABLE `4tads`.`cliente` ( `codigo` INTEGER(11) NOT NULL AUTO_INCREMENT, `nome` VARCHAR(255) NOT NULL, `telefone` VARCHAR(30) , PRIMARY KEY (`codigo`) ) ENGINE = InnoDB;
Agora crie um projeto JEE 6 (Veja aqui), com o nome de crudJSF, teremos como estrutura final o seguinte projeto:
Antes de iniciar a codificação, vamos colocar no projeto o driver JDBC para acesso ao banco de dados, para isso clique com o botão direito em cima de Bibliotecas – Adicionar Biblioteca e selecione MySQL JDBC Driver:
Agora no Pacotes de código-fonte crie os seguintes pacotes: model, controller e dao.
Dentro do model crie uma classe java chamada Cliente.java, com os atributos codigo, nome e telefone, além dos getters e setters:
public class Cliente { private int codigo; private String nome; private String telefone; public int getCodigo() { return codigo; } public void setCodigo(int codigo) { this.codigo = codigo; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getTelefone() { return telefone; } public void setTelefone(String telefone) { this.telefone = telefone; } }
Dentro do dao vamos criar uma classe java chamada Conexao.java, esta será responsável por fazer a conexão com o banco de dados:
import java.sql.DriverManager; import java.sql.SQLException; import com.mysql.jdbc.Connection; public class Conexao { private String driver = "com.mysql.jdbc.Driver"; private String URL = "jdbc:mysql://localhost/4tads"; private String USER = "root"; private String SENHA = "admin"; private Connection conn; public Conexao() { try { Class.forName(driver); conn = (Connection) DriverManager.getConnection(URL, USER, SENHA); } catch (Exception e) { e.printStackTrace(); } } public Connection getConn() { return conn; } public void fecharConexao() { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }
Perceba que o atributo URL termina com 4tads, este está se referindo a nossa database criada no inicio do post que contém nossa tabela cliente. Os atributos USER e SENHA, se referem ao usuário e a senha do banco de dados.
Depois de ter criado nosso arquivo de conexão com o banco, vamos criar nossa classe ClienteDAO.java:
import com.mysql.jdbc.Statement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import model.Cliente; /** * * @author andii */ public class ClienteDAO { private Conexao conexao; private Statement stmt; private boolean sucesso = false; public ClienteDAO() { conexao = new Conexao(); try { stmt = (Statement) conexao.getConn().createStatement(); } catch (SQLException ex) { ex.printStackTrace(); } } public boolean inserir(Cliente cliente) { try { stmt.execute("INSERT INTO cliente (nome, telefone) VALUES ('" + cliente.getNome() + "','" + cliente.getTelefone() + "')"); sucesso = true; } catch (Exception e) { e.printStackTrace(); } finally { conexao.fecharConexao(); } return sucesso; } public boolean alterar(Cliente cliente) { try { stmt.execute("UPDATE cliente SET nome = '" + cliente.getNome() + "', telefone = '" + cliente.getTelefone() + "' WHERE codigo = '" + cliente.getCodigo() + "'"); sucesso = true; } catch (Exception e) { e.printStackTrace(); } finally { conexao.fecharConexao(); } return sucesso; } public boolean remover(Cliente cliente) { try { stmt.execute("DELETE FROM cliente WHERE codigo = '" + cliente.getCodigo() + "'"); sucesso = true; } catch (Exception e) { e.printStackTrace(); } finally { conexao.fecharConexao(); } return sucesso; } public List<Cliente> listar() { List<Cliente> clientes = new ArrayList<Cliente>(); try { ResultSet rs = stmt.executeQuery("SELECT * FROM cliente ORDER BY nome"); while (rs.next()) { Cliente cliente = new Cliente(); cliente.setCodigo(rs.getInt("codigo")); cliente.setNome(rs.getString("nome")); cliente.setTelefone(rs.getString("telefone")); clientes.add(cliente); } } catch (Exception e) { e.printStackTrace(); } finally { conexao.fecharConexao(); } return clientes; } }
Agora dentro do controller vamos criar nosso bean, para isso crie uma nova classe java com o nome de ClienteBean.java:
import dao.ClienteDAO; import java.io.Serializable; import java.util.List; import javax.enterprise.context.SessionScoped; import javax.faces.model.DataModel; import javax.faces.model.ListDataModel; import javax.inject.Named; import model.Cliente; /** * * @author andii */ @Named @SessionScoped public class ClienteBean implements Serializable{ private ClienteDAO clienteDAO; private Cliente cliente = new Cliente(); private DataModel<Cliente> clientes; public void novo(){ cliente = new Cliente(); } public String inserir(){ String resultado = "falha"; clienteDAO = new ClienteDAO(); boolean retorno = clienteDAO.inserir(cliente); if(retorno){ resultado = "clientes"; } return resultado; } public void selecionar(){ cliente = clientes.getRowData(); } public String alterar(){ String resultado = "falha"; clienteDAO = new ClienteDAO(); boolean retorno = clienteDAO.alterar(cliente); if(retorno){ resultado = "clientes"; } return resultado; } public String remover(){ String resultado = "falha"; clienteDAO = new ClienteDAO(); boolean retorno = clienteDAO.remover(cliente); if(retorno){ resultado = "clientes"; } return resultado; } public Cliente getCliente() { return cliente; } public void setCliente(Cliente cliente) { this.cliente = cliente; } public DataModel<Cliente> getClientes() { clienteDAO = new ClienteDAO(); List<Cliente> clienteList = clienteDAO.listar(); clientes = new ListDataModel<Cliente>(clienteList); return clientes; } public void setClientes(DataModel<Cliente> clientes) { this.clientes = clientes; } }
Para finalizar vamos criar nossas páginas JSF, com o botão direito em Páginas Web – Novo – Outro... selecione a categoria JavaServer Faces e o tipo de arquivo Página JSF e aí é só colocar o nome e finalizar. Faça esse procedimento para criar as seguintes páginas:
Obs.: apenas substitua o h:body de cada página criada pelos respectivos códigos abaixo.
novo.xhtml:
<h:body> <h:form> <h:panelGrid columns="2"> <h:outputText value="Nome" /> <h:inputText value="#{clienteBean.cliente.nome}" /> <h:outputText value="Telefone" /> <h:inputText value="#{clienteBean.cliente.telefone}" /> <h:commandButton action="#{clienteBean.inserir}" value="Inserir" /> <h:commandButton action="clientes" immediate="true" value="Cancelar" /> </h:panelGrid> </h:form> </h:body>Visualização:
alterar.xhtml:
<h:body> <h:form> <h:panelGrid columns="2"> <h:outputText value="Nome" /> <h:inputText value="#{clienteBean.cliente.nome}" /> <h:outputText value="Telefone" /> <h:inputText value="#{clienteBean.cliente.telefone}" /> <h:commandButton action="#{clienteBean.alterar}" value="Alterar" /> <h:commandButton action="clientes" immediate="true" value="Cancelar" /> </h:panelGrid> </h:form> </h:body>Visualização:
<h:body> <h:form> <h:outputText value="Deseja remover o cliente: #{clienteBean.cliente.nome} ?" /> <h:panelGrid columns="2"> <h:commandButton action="#{clienteBean.remover}" value="Remover" /> <h:commandButton action="clientes" immediate="true" value="Cancelar" /> </h:panelGrid> </h:form> </h:body>Visualização:
clientes.xhtml:
<h:body> <h:form> <h:commandButton action="novo" actionlistener="#{clienteBean.novo}" value="Novo" /> <h:dataTable value="#{clienteBean.clientes}" var="c"> <h:column> <f:facet name="header"><h:outputText value="Nome" /></f:facet> <h:outputText value="#{c.nome}" /> </h:column> <h:column> <f:facet name="header"><h:outputText value="Telefone" /></f:facet> <h:outputText value="#{c.telefone}" /> </h:column> <h:column> <f:facet name="header"><h:outputText value="Ações" /></f:facet> <h:commandButton action="alterar" actionListener="#{clienteBean.selecionar}" value="Alterar" /> <h:commandButton action="remover" actionListener="#{clienteBean.selecionar}" value="Remover" /> </h:column> </h:dataTable> </h:form> </h:body>Visualização:
index.xhtml:
<h:body> <h:form> <h:commandButton action="clientes" value="Clientes" /> </h:form> </h:body>Visualização:
<h:body> <h:form> <h:outputText value="Ocorreu um erro, tente novamente:" /> <h:commandButton action="index" value="Tentar novamente" /> </h:form> </h:body>Visualização:
É isso aí... ;)