Exemplo de CRUD em JSF – Versão 1.0

Há muita confusão em JSF sobre como fazer a navegação da aplicação, o tratamento de requisições, etc, principalmente daqueles que migram de tecnologias diferentes, como Struts, por exemplo. Portanto, resolvi postar um projeto básico em JSF com um esquema de navegação simples de um CRUD (Create Read Update Delete).

Num próximo post pretendo fazer um exemplo de CRUD JSF um pouco mais incrementado, constituindo um framework simples para lidar com CRUDs.

Considerações sobre o exemplo

Desenvolvido em JSF2, mas facilmente adaptável para JSF 1, já que o único recurso utilizado foram as anotações do JSF2.

Para tornar o exemplo mais simples e focado na parte do controle e navegação do CRUD, foi abstraída a classe com métodos de acesso a base de dados através da técnica de objetos Mock (objetos falsos para testes) que retornavam valores fixos.

Exemplo

Baixe o projeto completo em Eclipse.

Os códigos das telas estão abaixo:

br.com.crudjsf.mbean.ProdutoMBean.java:

package br.com.crudjsf.mbean;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

import br.com.crudjsf.entidade.Produto;
import br.com.crudjsf.negocio.ProdutoService;
import br.com.crudjsf.negocio.ProdutoServiceImplMock;

@ManagedBean
public class ProdutoMBean {

    private ProdutoService produtoService = new ProdutoServiceImplMock();

    private Produto produto;

    public ProdutoMBean() {
        if (produto == null) {
            // obtem parametro
            ExternalContext ctx = FacesContext
                                      .getCurrentInstance()
                                      .getExternalContext();

            String idParam = ctx.getRequestParameterMap().get("id");

            if (idParam != null && !idParam.equals("")) {
                try {
                    this.produto = produtoService
                                      .findById(Integer.parseInt(idParam));
                } catch(NumberFormatException e) {
                    // log
                }
            } 

            if (this.produto == null) {
                this.produto = new Produto();
            }
        }
    }

    public Produto getProduto() {
        return produto;
    }

    public void setProduto(Produto produto) {
        this.produto = produto;
    }

    public List getLista() {
        return produtoService.list();
    }

    public String editar() {
        produtoService.merge(produto);
        return "show";
    }

    public String adicionar() {
        produtoService.add(produto);
        return "show";
    }

    public void remover() {
        produtoService.remove(produto);
    }
}

list.xhtml:

<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<!DOCTYPE composition 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”>
     <head>
          <title>CRUD – List</title>
     </head>

     <body>
          <strong>List</strong><br />
          <h:form>
              <h:outputLink value=”new.jsf”>Novo</h:outputLink>
              <br /><br />
              <h:dataTable value=”#{produtoMBean.lista}” var=”produto”>
                   <h:column>
                        <f:facet name=”header”>Nome</f:facet>
                        #{produto.nome}
                   </h:column>
                   <h:column>
                       <f:facet name=”header”>Descrição</f:facet>
                       #{produto.descricao}
                   </h:column>
                   <h:column>
                       <f:facet name=”header”>Preço</f:facet>
                       #{produto.preco}
                   </h:column>
                   <h:column>
                        <h:commandButton action=”show” value=”Ver”>
                             <f:param name=”id” value=”#{produto.id}” />
                        </h:commandButton>
                        <h:commandButton action=”edit” value=”Editar”>
                             <f:param name=”id” value=”#{produto.id}” />
                        </h:commandButton>
                       <h:commandButton action=”#{produtoMBean.remover}” 
                            value=”Excluir” 
                            onclick=”return confirm(‘Tem certeza?’)”>
                            <f:param name=”id” value=”#{produto.id}” />
                       </h:commandButton>
                  </h:column>
             </h:dataTable>
        </h:form>
   </body>
</html>

new.xhtml:

<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<!DOCTYPE composition 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”>

     <head>
          <title>CRUD – New</title>
     </head>
     <body>
          <strong>New</strong><br />
          <h:messages />
          <h:form>
              <h:commandLink action=”#{produtoMBean.adicionar}” value=”Salvar”>
                   <f:param name=”id” value=”#{produtoMBean.produto.id}” />
              </h:commandLink>
              | 
              <h:outputLink value=”list.jsf”>Voltar</h:outputLink>
              <br /><br />

              Nome: <h:inputText value=”#{produtoMBean.produto.nome}” />
              <br />

              Descrição: <h:inputText value=”#{produtoMBean.produto.descricao}” />
              <br />

              Preço: <h:inputText value=”#{produtoMBean.produto.preco}” />
         </h:form>
     </body>
</html>

show.xhtml:

<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<!DOCTYPE composition 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”>

      <head>
           <title>CRUD – Show</title>
      </head>
      <body>
          <strong>Showstrong><br />
		  <h:form>
              <h:commandLink action=”edit” value=”Editar”>
                   <f:param name=”id” value=”#{produtoMBean.produto.id}” />
              </h:commandLink>
              | 
              <h:outputLink value=”list.jsf”>Voltar</h:outputLink>
              <br /><br />

              Nome:
              <h:outputText value=”#{produtoMBean.produto.nome}” />
              <br />

              Descrição: <h:outputText value=”#{produtoMBean.produto.descricao}” />
              <br />

              Preço: <h:outputText value=”#{produtoMBean.produto.preco}” />
         </h:form>
     </body>
</html>

edit.xhtml:

<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<!DOCTYPE composition 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”>

     <head>
         <title>CRUD – Edit</title>
     </head>

     <body>
          <h:form>
               <h:commandLink action=”#{produtoMBean.editar}” value=”Salvar”>
                    <f:param name=”id” value=”#{produtoMBean.produto.id}” />
               </h:commandLink>
               <br /><br />

               Nome: <h:inputText value=”#{produtoMBean.produto.nome}” />
               <br />

               Descrição: <h:inputText value=”#{produtoMBean.produto.descricao}” />
               <br />

               Preço: <h:inputText value=”#{produtoMBean.produto.preco}” />
          </h:form>
     </body>
</html>

Até a próxima.

 

One comment on “Exemplo de CRUD em JSF – Versão 1.0

  1. Thiago Takao on said:

    Hehehe legal o post =) …

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>