JSF com JDBC

JSF com JDBC

O JSF é uma especificação JAVA baseada no modelo MVC (Model-View-Control) para aplicações WEB. É assim substituindo o antigo padrão JSP /Servelet. Junto do JSF sugiram vários framework para a camada de View. Nesse exemplo foi utilizado o Primefaces 4.0 e o acesso ao banco de dados é feito com JDBC.

As libs do Projeto são : JSF 2.0 , Primefaces 4.0 , Oracle necessárias são:

commons-beanutils-1.8.0.jar jsf-api.jar
commons-beanutils.jar jsf-impl.jar
commons-collections-3.2.1.jar jstl.jar
commons-collections.jar ojdbc14-10.2.0.3.jar
commons-digester-2.0.jar primefaces-4.0-sources.jar
commons-digester.jar primefaces-4.0.jar
commons-logging-1.1.1.jar servlet-api-3.0.jar
commons-logging.jar standard.jar

Criando o banco de dados

conn system/coti

drop table funcionario cascade constraint;
drop table endereco cascade constraint;

drop sequence seq_funcionario;
drop sequence seq_endereco;

create sequence seq_funcionario;
create sequence seq_endereco;

create table funcionario(
	idFuncionario number(5) primary key,
	nome varchar(35),
	cargo varchar(35),
	salario number(10,2)
);

create table endereco(
	idEndereco number(5) primary key,
	rua varchar(35),
	cidade varchar(35),
	estado varchar(20),
	id_funcionario number(5),
	foreign key(id_funcionario) references funcionario
);    

Acesso ao banco de dados

package persistence;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class Dao {

	Connection con;
	PreparedStatement stmt;
	ResultSet rs;
	
	public void open() throws Exception{		
		Class.forName("oracle.jdbc.driver.OracleDriver");
		con = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE", "system", "coti");		
	}
	
	public void close() throws Exception{
		con.close();
	}
}    

Classe FuncionarioDao

package persistence;

import java.util.ArrayList;
import java.util.List;

import entity.Endereco;
import entity.Funcionario;

public class FuncionarioDao extends Dao{
	
	
	public void create(Funcionario f) throws Exception{
		open();
			stmt = con.prepareStatement("insert into Funcionario values(seq_funcionario.nextval,?,?,?)");
			stmt.setString(1, f.getNome());
			stmt.setString(2, f.getCargo());
			stmt.setDouble(3, f.getSalario());
			stmt.execute();
			
			stmt = con.prepareStatement("insert into Endereco values(seq_endereco.nextval,?,?,?,seq_funcionario.currval)");
			stmt.setString(1, f.getEndereco().getRua());
			stmt.setString(2, f.getEndereco().getCidade());
			stmt.setString(3, f.getEndereco().getEstado());
			stmt.execute();
			stmt.close();
		close();
	}
	
	
	public void delete(Funcionario f) throws Exception{
		
		open();
			stmt = con.prepareStatement("delete from endereco where id_funcionario = ?");
			stmt.setInt(1, f.getIdFuncionario());
			stmt.execute();
			
			stmt = con.prepareStatement("delete from funcionario where idFuncionario = ?");
			stmt.setInt(1, f.getIdFuncionario());
			stmt.execute();
			
			stmt.close();
		close();
	}
	
	public void update(Funcionario f) throws Exception{
		
		open();
			stmt = con.prepareStatement("update funcionario set nome = ?, cargo = ?, salario = ? where idFuncionario = ?");
			stmt.setString(1, f.getNome());
			stmt.setString(2, f.getCargo());
			stmt.setDouble(3, f.getSalario());
			stmt.setInt(4, f.getIdFuncionario());
			stmt.execute();
			
			stmt = con.prepareStatement("update endereco set rua = ?, cidade = ?, estado = ? where id_Funcionario = ?");
			stmt.setString(1, f.getEndereco().getRua());
			stmt.setString(2, f.getEndereco().getCidade());
			stmt.setString(3, f.getEndereco().getEstado());
			stmt.setInt(4, f.getIdFuncionario());
			stmt.execute();
			
			stmt.close();
		close();
		
	}
	
	
	public List findAll() throws Exception{
		
		open();
			stmt = con.prepareStatement("select * from funcionario f inner join endereco e on f.idFuncionario = e.id_Funcionario");
			rs = stmt.executeQuery();
			List lista = new ArrayList();
			while(rs.next()){
				Funcionario f = new Funcionario();
				f.setIdFuncionario(rs.getInt("idFuncionario"));
				f.setNome(rs.getString("nome"));
				f.setCargo(rs.getString("cargo"));
				f.setSalario(rs.getDouble("salario"));				
				f.setEndereco(new Endereco());
				f.getEndereco().setIdEndereco(rs.getInt("idEndereco"));
				f.getEndereco().setRua(rs.getString("rua"));
				f.getEndereco().setCidade(rs.getString("cidade"));
				f.getEndereco().setEstado(rs.getString("estado"));				
				lista.add(f);
			}			
			
		close();
		return lista;
	}
	
	
	public Funcionario findByCod(Integer cod) throws Exception{
		
		open();
			stmt = con.prepareStatement("select * from funcionario f inner join endereco e on f.idFuncionario = e.id_Funcionario where idFuncionario = ?");
			stmt.setInt(1, cod);
			rs = stmt.executeQuery();
			List lista = new ArrayList();
			Funcionario f = null;
			if(rs.next()){
				f = new Funcionario();
				f.setIdFuncionario(rs.getInt("idFuncionario"));
				f.setNome(rs.getString("nome"));
				f.setCargo(rs.getString("cargo"));
				f.setSalario(rs.getDouble("salario"));				
				f.setEndereco(new Endereco());
				f.getEndereco().setIdEndereco(rs.getInt("idEndereco"));
				f.getEndereco().setRua(rs.getString("rua"));
				f.getEndereco().setCidade(rs.getString("cidade"));
				f.getEndereco().setEstado(rs.getString("estado"));
			}			
			
		close();
		return f;
		}
	
	}        

Classe ManagerBean

package manager;

import java.util.ArrayList;
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 persistence.FuncionarioDao;
import entity.Endereco;
import entity.Funcionario;


@ManagedBean(name="mb")
@RequestScoped
public class ManagerBean {

	private Funcionario funcionario;
	private List listaFuncionario;
	
	public ManagerBean() {
		funcionario = new Funcionario();
		funcionario.setEndereco(new Endereco());
	}

	public Funcionario getFuncionario() {
		return funcionario;
	}

	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	public List getListaFuncionario() {
		listaFuncionario = new ArrayList();
		try {
			listaFuncionario = new FuncionarioDao().findAll();	
		} catch (Exception e) {
			e.printStackTrace();
		}		
		
		return listaFuncionario;
	}

	public void setListaFuncionario(List listaFuncionario) {
		this.listaFuncionario = listaFuncionario;
	}
	
	public void gravar(){
		
		FacesContext fc = FacesContext.getCurrentInstance();
		String msg = "";
		try {
			
			new FuncionarioDao().create(funcionario);
			funcionario = new Funcionario();
			
			msg = "Dados Gravados...";
			
		} catch (Exception e) {
			msg = "Erro" + e.getMessage();
			
		}
		
		fc.addMessage(null, new FacesMessage(msg));
		
	}
	
	
	public void excluir(){
		
		FacesContext fc = FacesContext.getCurrentInstance();
		String msg = "";
		
		try {			
			new FuncionarioDao().delete(funcionario);
			
			msg = "Dados Excluídos";
			
		} catch (Exception e) {
			msg = "Error" + e.getMessage();
		}
		
		fc.addMessage(null, new FacesMessage(msg));
	}

	
	public void alterar(){
		
		FacesContext fc = FacesContext.getCurrentInstance();
		String msg = "";
		
		try {			
			new FuncionarioDao().update(funcionario);
			
			msg = "Dados Alterados";
			
		} catch (Exception e) {
			msg = "Error" + e.getMessage();
		}
		
		fc.addMessage(null, new FacesMessage(msg));
		
	}
}    

sistema.xhtml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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:h="http://java.sun.com/jsf/html"
	  xmlns:f="http://java.sun.com/jsf/core"
	  xmlns:p="http://primefaces.org/ui"
>
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Insert title here</title>
</h:head>
<h:body>

	<p:panel header="Sistema de Cadastro">
	
		<h:form id="form1">
			
			<p:panelGrid columns="2">
				
				<h:outputText value="Nome"/>
				<p:inputText value="#{mb.funcionario.nome}" />

				<h:outputText value="Cargo"/>
				<p:inputText value="#{mb.funcionario.cargo}" />
				
				<h:outputText value="Salario"/>
				<p:inputText value="#{mb.funcionario.salario}" />				
			
			
				<h:outputText value="Rua"/>
				<p:inputText value="#{mb.funcionario.endereco.rua}" />
			
				<h:outputText value="Cidade"/>
				<p:inputText value="#{mb.funcionario.endereco.cidade}" />
			
				<h:outputText value="Estado"/>
				<p:selectOneMenu value="#{mb.funcionario.endereco.estado}">
					<f:selectItem itemValue="RJ" itemLabel="Rio de Janeiro"/>
					<f:selectItem itemValue="SP" itemLabel="Sao Paulo"/>
					<f:selectItem itemValue="MG" itemLabel="Minas Gerais"/>
					<f:selectItem itemValue="RS" itemLabel="Rio Grande do Sul"/>
				</p:selectOneMenu>			
			
			
			</p:panelGrid>
			
			<p:separator/>
			
			<p:commandButton value="Cadastrar" ajax="true" 
				action="#{mb.gravar}" update=":form1,:form2" />
			<p:growl/>
			<p:messages/>
		</h:form>
	
	</p:panel>
	
	
	<p:separator />
	
	<p:panel header="Listagem de Funcionario">
	
		<h:form id="form2">
			<p:dataTable value="#{mb.listaFuncionario}" var="linha">
				<p:column headerText="idFuncionario">
					<h:outputText value="#{linha.idFuncionario}" />
				</p:column>			
				
				<p:column headerText="Nome">
					<h:outputText value="#{linha.nome}" />
				</p:column>			

				<p:column headerText="Cargo">
					<h:outputText value="#{linha.cargo}" />
				</p:column>			

				<p:column headerText="Salario">
					<h:outputText value="#{linha.salario}">
						<f:convertNumber type="currency"  />
					</h:outputText>
				</p:column>		
				
				<p:column headerText="Rua">
					<h:outputText value="#{linha.endereco.rua}" />
				</p:column>			

				<p:column headerText="Cidade">
					<h:outputText value="#{linha.endereco.cidade}" />
				</p:column>			

				<p:column headerText="Estado">
					<h:outputText value="#{linha.endereco.estado}" />
				</p:column>			

				<p:column headerText="Excluir">
					<p:commandButton value="Excluir" action="#{mb.excluir}" ajax="true" update=":form2">
						<f:setPropertyActionListener target="#{mb.funcionario}" value="#{linha}"/>
					</p:commandButton>
				</p:column>	

				<p:column headerText="Alterar">
					<p:commandButton value="Alterar" onclick="janela.show()" update=":form2,:form3">
						<f:setPropertyActionListener target="#{mb.funcionario}" value="#{linha}"/>						
					</p:commandButton>
				</p:column>	
			</p:dataTable>		
		</h:form>	
	</p:panel>
	
	
	<p:dialog widgetVar="janela" header="Alterar Funcionario" modal="true"  >		
		<h:form id="form3">
			
				<h:inputHidden value="#{mb.funcionario.idFuncionario}" />
			
			<p:panelGrid columns="2">
					
				<h:outputText value="Nome"/>
				<p:inputText value="#{mb.funcionario.nome}" />

				<h:outputText value="Cargo"/>
				<p:inputText value="#{mb.funcionario.cargo}" />
				
				<h:outputText value="Salario"/>
				<p:inputText value="#{mb.funcionario.salario}" />				
						
				<h:outputText value="Rua"/>
				<p:inputText value="#{mb.funcionario.endereco.rua}" />
			
				<h:outputText value="Cidade"/>
				<p:inputText value="#{mb.funcionario.endereco.cidade}" />
			
				<h:outputText value="Estado"/>
				<p:selectOneMenu value="#{mb.funcionario.endereco.estado}">
					<f:selectItem itemValue="RJ" itemLabel="Rio de Janeiro"/>
					<f:selectItem itemValue="SP" itemLabel="Sao Paulo"/>
					<f:selectItem itemValue="MG" itemLabel="Minas Gerais"/>
					<f:selectItem itemValue="RS" itemLabel="Rio Grande do Sul"/>
				</p:selectOneMenu>
			</p:panelGrid>
						
			<p:commandButton value="Alterar" ajax="true" 
				action="#{mb.alterar}" update=":form2,:form3" />
				
			<p:growl/>	
		</h:form>
	</p:dialog>
	
</h:body>
</html> 

Resultado do aplicativo...