Olá, pessoal! Neste artigo apresentarei como
conectar um DB(Mysql) + JSF usando o padrão DAO. Aqui vamos criar uma aplicação que
grava nome e email dos clientes, tendo como IDE o Netbeans.
Lets go…
Artigos anteriores:
Usando JSF com Netbeans – criando uma newsletter
Requisitos:
- Netbeans 6.7
- Mysql instalado
Passo 1
Crie um schema e uma tabela no mysql com o nome que achar
conveniente, aqui chamamos de livraria (schema) e
clientes (tabela).
Os campos para tabela foram:
id: Integer autoincrement
nome: varchar
email: varchar
Passo 2
Crie um projeto chamado CadCliJSF e escolha o framework
JSF. Se você tem alguma dúvida, veja o primeiro artigo da série.
Vamos Criar a classe de conexão com banco de dados. Para isso crie
um new package: br.com.camilo.util
e coloque a classe nesse package.
Chamamos aqui de ConnectionFactory
package br.com.integrator.util;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.Connection;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class ConnectionFactory {
public static Connection getConnection() throws Exception{
try{
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection("jdbc:mysql://localhost/livraria", "camilo", "123");
}
catch(Exception e){
throw new Exception(e.getMessage());
}
}
public static void closeConnection(Connection conn, Statement stmt, ResultSet rs)throws Exception{
close(conn,stmt,rs);
}
public static void closeConnection(Connection conn, Statement stmt)throws Exception{
close(conn,stmt,null);
}
public static void closeConnection(Connection conn)throws Exception{
close(conn,null,null);
}
private static void close(Connection conn, Statement stmt, ResultSet rs) throws Exception{
try{
if(rs!=null) rs.close();
if(stmt!=null)stmt.close();
if(conn!=null)conn.close();
}catch(Exception e){
throw new Exception(e.getMessage());
}
}
}
Passo 3: cliente.java
Crie agora o JavaBeans chamado cliente dentro do package
br.com.cliente.
package br.com.cliente;
/**
*
* @author Camilo
*/
public class Cliente {
private int id;
private String nome = null;
private String email = null;
public Cliente( int id, String nome, String email){
this.id = id;
this.nome = nome;
this.email = email;
}
public Cliente(){
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String nascimento) {
this.email = nascimento;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
Ppasso 4: DAO.java / ClienteDAOImp.java
Crie um package chamado br.com.camilo.dao e coloque a
classe dentro desse package.
Agora vamos criar uma interface DAO.java que possui os
métodos de ação com o DB. Nesse caso, teremos apenas o salvar.
Abaixo, o code da interface.
package br.com.integrator.dao;
import br.com.cliente.Cliente;
import java.util.List;
/**
*
* @author Administrador
*/
public interface DAO {
// void atualizar(Cliente cliente) throws Exception;
//void excluir(Cliente cliente) throws Exception;
//cliente procurarcliente(Integer id) throws Exception;
void salvar(Cliente cliente) throws Exception;
//List todosclientes() throws Exception;
}
Passo 5
Vamos criar a classe que implementa os métodos da interface DAO.
Observe que assim fica mais fácil a manutenção e o reuso de código
também.
Portanto, no package br.com.camilo.dao, crie uma
classe que implementa os a interface dao.java. Aqui chamados de
ClienteDAOImp. Veja o code:
package br.com.integrator.dao;
import br.com.cliente.Cliente;
import br.com.integrator.util.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class ClienteDAOImp implements DAO {
private Connection conn;
/**
* construtor que se conecta ao banco de dados
* @throws java.lang.Exception se não houver conexão
*/
public ClienteDAOImp( ) throws Exception{
try {
this.conn = ConnectionFactory.getConnection( );
} catch( Exception e ) {
throw new Exception( "Erro: " +
"\n" + e.getMessage( ) );
} }
/**
* Método que insere dados na tabela Clientes
* * @throws java.lang.Exception se não conseguir inserir
*/
public void salvar(Cliente cliente) throws Exception{
PreparedStatement ps = null;
Connection conn = null;
if (cliente == null)throw new Exception("O valor passado não pode ser nulo");
try {
String SQL = "INSERT INTO cliente (nome, email) "+
"values (?, ?)";
conn = this.conn;
ps = conn.prepareStatement(SQL);
ps.setString(1, cliente.getNome());
ps.setString(2, cliente.getEmail( ));
ps.executeUpdate( );
} catch (SQLException sqle) {
throw new
Exception("Erro ao inserir dados "+ sqle);
} finally {
ConnectionFactory.closeConnection(conn, ps);
} }
Passo 6
Crie um package br.com.Controler e crie uma classe chamada
CliControler.java. Esta classe vai executar as ações com base
no que foi solicitado pelo usuário. Se este clicar em salvar, o
controlador vai chamar o método salvar da interface dao.java
implementado pela classe CliDAOimp.
package br.com.Controler;
import br.com.cliente.Cliente;
import br.com.integrator.dao.ClienteDAOImp;
import br.com.integrator.dao.DAO;
/**
*
* @author Camilo
*/
public class CliController {
private Cliente cliente;
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public String novo(){
this.cliente = new Cliente();
return "novo";
}
public String salvar() throws Exception{
DAO dao = new ClienteDAOImp();
dao.salvar(cliente);
return "salvar";
}
}
Passo 7
Crie os arquivos abaixo.
Agora altere o arquivo formAutor.jsp conforme o code a seguir.
Adicione o code abaixo entre <body> </body>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!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"> </head>
<body>
<f:view>
<h:form id="form1">
<h:panelGrid columns="3">
<f:facet name="header">
<h:outputText value="::Cadastro de Clientes"/>
</f:facet>
<h:outputText value="Nome:" />
<h:inputText size="15" id="nome"
value="#{cliC.cliente.nome}"
required="true"
requiredMessage="Campo obrigatório"/>
<h:message for="nome"/>
<h:outputText value="E-mail:" />
<h:inputText size="30" id="email"
value="#{cliC.cliente.email}"
required="true"
requiredMessage="Campo obrigatório"/>
<h:message for="email"/>
</h:panelGrid>
<h:commandButton value="Salvar"
action="#{cliC.salvar}" />
<h:commandButton value="Limpar" type="reset" />
<h:commandLink value="Cancelar" action="cancelar" immediate="true" />
</h:form>
</f:view>
</body>
</html>
Agora altere o arquivo menu.jsp:
-
para o arquivo forwardToJSF.jsp, deixei assim: <jsp:forward
page=”menu.jsf”/> - para o arquivo cancelado.jsp, deixe conforme a imagem abaixo:
<f:view>
<h:outputText value="operação realizada" />
</f:view>
Agora, vamos configurar o arquivo face-web.xml. Portanto, deixe assim:
Running…
Fico por aqui e espero que tenham
gostado da série JSF com Netbeans. Quero aproveitar e divulgar o novo endereco do meu blog, http://www.camilolopes.com
Até o
próximo post! Abraço!