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í... ;)


















