Esta postagem não difere muito desta: CRUD em JSF, o que difere é que teremos um pouco mais que um HTML puro como visualização, estaremos utilizando o PrimeFaces para criar a tabela com paginação e ter o inserir, alterar e remover dentro de painéis. Então, inicialmente a diferença do link acima é que nesta postagem estaremos utilizando valores como: double e java.util.Date, para mostrar que quando se trata de JSF não há necessidade de converter esses valores (no caso de view para controle) apenas na hora de armazenar no banco de dados é necessário converter o java.util.Date para java.sql.Date e vice-versa.
Iniciando...
Como estamos adicionando um valor(double) e uma data(java.util.Date) na nossa aplicação, segue o código SQL atualizado:
CREATE TABLE Categoria ( `codigo` int(11) unsigned NOT NULL AUTO_INCREMENT, `nome` varchar(45) DEFAULT NULL, `valor` double DEFAULT NULL, `data` date DEFAULT NULL, PRIMARY KEY (`codigo`) )
Eu criei essa tabela dentro de uma database "tads", caso não seja essa a sua, lembre-se de informar isso ao criar a conexão ;)
model
Categoria.java:
public class Categoria { private int codigo; private String nome; private double valor; private Date data; 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 double getValor() { return valor; } public void setValor(double valor) { this.valor = valor; } public Date getData() { return data; } public void setData(Date data) { this.data = data; } }
dao
Categoria_DAO.java:
public class Categoria_DAO { public String inserir(Categoria categoria){ String retorno = "falha"; Conexao conn = new Conexao(); try{ Date dataSql = new Date(categoria.getData().getTime()); Statement stmt = (Statement) conn.getConn().createStatement(); stmt.execute("insert into Categoria (nome, valor, data) values ('"+categoria.getNome()+"','"+categoria.getValor()+"','"+dataSql+"')"); retorno = "sucesso"; }catch(Exception e){ e.printStackTrace(); }finally { conn.fecharConexao(); } return retorno; } public List<Categoria> listar(){ List<Categoria> categorias = new ArrayList<Categoria>(); Conexao conn = new Conexao(); try{ Statement stmt = (Statement) conn.getConn().createStatement(); ResultSet rs = stmt.executeQuery("Select * from Categoria"); while(rs.next()){ Categoria categoria = new Categoria(); categoria.setCodigo(rs.getInt("codigo")); categoria.setNome(rs.getString("nome")); categoria.setValor(rs.getDouble("valor")); categoria.setData(new SimpleDateFormat("yyyy-MM-dd").parse(rs.getString("data"))); categorias.add(categoria); } }catch(Exception e){ e.printStackTrace(); }finally { conn.fecharConexao(); } return categorias; } public Categoria selecionar(int codigo){ Categoria categoria = new Categoria(); Conexao conn = new Conexao(); try{ Statement stmt = (Statement) conn.getConn().createStatement(); ResultSet rs = stmt.executeQuery("Select * from Categoria where codigo = '"+codigo+"'"); rs.next(); categoria.setCodigo(rs.getInt("codigo")); categoria.setNome(rs.getString("nome")); categoria.setValor(rs.getDouble("valor")); categoria.setData(new SimpleDateFormat("yyyy-MM-dd").parse(rs.getString("data"))); }catch(Exception e){ e.printStackTrace(); }finally { conn.fecharConexao(); } return categoria; } public String alterar(Categoria categoria){ String retorno = "falha"; Conexao conn = new Conexao(); try{ Date dataSql = new Date(categoria.getData().getTime()); Statement stmt = (Statement) conn.getConn().createStatement(); stmt.execute("update Categoria set nome = '"+categoria.getNome()+"', " + "valor = '"+categoria.getValor()+"', data = '"+dataSql+"' " + " where codigo = '"+categoria.getCodigo()+"'"); retorno = "sucesso"; }catch(Exception e){ e.printStackTrace(); }finally { conn.fecharConexao(); } return retorno; } public String remover(int codigo){ String retorno = "falha"; Conexao conn = new Conexao(); try{ Statement stmt = (Statement) conn.getConn().createStatement(); stmt.execute("delete from Categoria where codigo = '"+codigo+"'"); retorno = "sucesso"; }catch(Exception e){ e.printStackTrace(); }finally { conn.fecharConexao(); } return retorno; } }
Quanto as outras classes (CategoriaBean) continuam do mesmo jeito que no CRUD em JSF.
Agora o que muda também são nossos JSP's, para configurar o PrimeFaces 1.1: Clique aqui
Depois de configurado podemos começar a implementação dos nossos JSP's:
index.jsp:
Código-Fonte:
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="http://primefaces.prime.com.tr/ui" prefix="p"%> <html> <f:view> <head> <title>Categorias</title> <p:resources /> </head> <body> <h:form> <p:commandButton value="Nova" action="#{categoriaBean.nova}" ajax="false" /> <p:dataTable value="#{categoriaBean.categorias}" var="c" paginator="true" rows="5" emptyMessage="Categorias não encontradas!"> <p:column> <f:facet name="header"> <h:outputText value="Codigo" /> </f:facet> <h:outputText value="#{c.codigo}" /> </p:column> <p:column filterBy="#{c.nome}"> <f:facet name="header"> <h:outputText value="Nome" /> </f:facet> <h:outputText value="#{c.nome}" /> </p:column> <p:column> <f:facet name="header"> <h:outputText value="Valor" /> </f:facet> <h:outputText value="#{c.valor}" /> </p:column> <p:column> <f:facet name="header"> <h:outputText value="Data" /> </f:facet> <h:outputText value="#{c.data}"> <f:convertDateTime pattern="dd/MM/yyyy" /> </h:outputText> </p:column> <p:column> <f:facet name="header"> <h:outputText value="Ações" /> </f:facet> <h:commandButton value="Editar" actionListener="#{categoriaBean.selecionar(c.codigo)}" action="alterar" image="/imagens/editar.png" /> <h:commandButton value="Remover" actionListener="#{categoriaBean.selecionar(c.codigo)}" action="remover" image="/imagens/remover.png" /> </p:column> </p:dataTable> </h:form> </body> </f:view> </html>
inserirCategoria.jsp:
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <%@ taglib uri="http://primefaces.prime.com.tr/ui" prefix="p" %> <html> <f:view> <head> <title>Inserir Categoria</title> <p:resources /> </head> <body> <p:growl id="aviso" /> <p:panel header="Inserir Categoria" style="width: 320px" > <h:form> <h:panelGrid columns="2"> <h:outputText value="Nome" /> <h:inputText value="#{categoriaBean.categoria.nome}" required="true" requiredMessage="Informe o nome" /> <h:outputText value="Valor" /> <h:inputText value="#{categoriaBean.categoria.valor}" required="true" requiredMessage="Informe o valor" /> <h:outputText value="Data" /> <p:calendar value="#{categoriaBean.categoria.data}" pattern="dd/MM/yyyy" locale="pt_BR" required="true" requiredMessage="Informe a data" /> <p:commandButton value="Salvar" action="#{categoriaBean.inserir}" update="aviso" ajax="false" /> <p:commandButton value="Cancelar" action="cancelar" immediate="true" ajax="false" /> </h:panelGrid> </h:form> </p:panel> </body> </f:view> </html>
alterarCategoria.jsp
O alterarCategoria é praticamente idêntico ao inserirCategoria, o que muda é o botão de Salvar pois a action passa a ser #{categoriaBean.alterar}, mas mesmo assim segue o código:
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <%@ taglib uri="http://primefaces.prime.com.tr/ui" prefix="p" %> <html> <f:view> <head> <title>Alterar Categoria</title> <p:resources /> </head> <body> <p:growl id="aviso" /> <p:panel header="Alterar Categoria" style="width: 320px" > <h:form> <h:panelGrid columns="2"> <h:outputText value="Nome" /> <h:inputText value="#{categoriaBean.categoria.nome}" required="true" requiredMessage="Informe o nome" /> <h:outputText value="Valor" /> <h:inputText value="#{categoriaBean.categoria.valor}" required="true" requiredMessage="Informe o valor" /> <h:outputText value="Data" /> <p:calendar value="#{categoriaBean.categoria.data}" pattern="dd/MM/yyyy" locale="pt_BR" required="true" requiredMessage="Informe a data" /> <p:commandButton value="Salvar" action="#{categoriaBean.alterar}" update="aviso" ajax="false" /> <p:commandButton value="Cancelar" action="cancelar" immediate="true" ajax="false" /> </h:panelGrid> </h:form> </p:panel> </body> </f:view> </html>
removerCategoria.jsp
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <%@ taglib uri="http://primefaces.prime.com.tr/ui" prefix="p" %> <html> <f:view> <head> <title>Remover Categoria</title> <p:resources /> </head> <body> <p:panel header="Remover Categoria" style="width: 400px" > <h:form> <h:outputText value="Confirma remoção da categoria: #{categoriaBean.categoria.nome} ?" /> <h:panelGrid columns="2"> <p:commandButton value="Sim" action="#{categoriaBean.remover}" ajax="false" /> <p:commandButton value="Não" action="cancelar" immediate="true" ajax="false" /> </h:panelGrid> </h:form> </p:panel> </body> </f:view> </html>
Para finalizar, o faces-config.xml deve ter essa estrutura de navegação:
Olá! Obrigada pela visita e pelo comentário... Volte sempre! Fico muito feliz em poder ajudar =D
ResponderExcluirMuito bom...
ResponderExcluirPodeira colocar os arquivos pra download?
Obrigado
poderia postar o codigo do manager bean
ResponderExcluirO link informado acima está corrompido Andii..
ResponderExcluirOlá Felipe! Obrigada por avisar, mas andei vendo, e o link é o mesmo ao qual eu me referencio no começo da postagem "CRUD em JSF" :)
ResponderExcluir