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