Problema para listar dados na combo com vraptor

13 respostas
brunowc

Olá pessoal, gostaria muito da ajuda de voces.
Eu estou fazendo um projeto usando vraptor, sitemesh , hibernate e utilizei o projeto lojavirtual como exemplo, até que estou indo bem, poreeeeeem estou travado numa parte.
Tenho uma classe Produto, que contem uma Categoria e um Fornecedor, porem não estou conseguindo listar na tela de cadastro de produtos os fornecedores e a categoria…
Voces poderiam me ajudar ?

Segue as minhas classes abaixo.

O meu JSP

<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>Cadastro de produtos</title>

    </head>
    <body>
        <div align="center">
        <h1>Cadastro de Produtos</h1>

              <form action="produto.adiciona.logic" method="get">
                    <table>
                        <tr>
                            <td>Nome do Produto:</td>
                            <td>Status:</td>
                        </tr>
                        <tr>
                            <td><input maxlength="25" size="35" name="produto.nome"></td>
                            <td><select name="produto.status">
                                    <option>ATIVO</option>
                                    <option>INATIVO</option>
                                </select></td>
                        </tr>
                        <tr>
                            <td>Marca:</td>
                            <td>Modelo:</td>
                        </tr>
                        <tr>
                            <td> <input maxlength="25" size="35" name="produto.marca"></td>
                            <td> <input maxlength="25" size="35" name="produto.modelo"></td>
                        </tr>
                        <tr>
                            <td>Valor de Venda:</td>
                            <td>Valor de Compra:</td>
                        </tr>
                        <tr>
                            <td> <input maxlength="25" size="35" name="produto.vlvenda"></td>
                            <td> <input maxlength="25" size="35" name="produto.vlcompra"></td>
                        </tr>
                         <tr>
                            <td>Quantidade:</td>
                             <td>Fornecedor</td>
                        </tr>
                        <tr>
                            <td><input maxlength="25" size="35" name="produto.quantidade"></td>
                            <td><select name=produto.fornecedor.id">
                                    <c:forEach var="fornecedor" items="${ListaFornecedores}">
 					<option value="${fornecedor.id}">
 						<c:if test="${produto.fornecedor.id == fornecedor.id}"></c:if>
 						${fornecedor.nome}
 					</option>
                                    </c:forEach>
                                </select>
                       </td>
                        </tr>
                        <tr>
                            <td>Categoria:</td>
                             <td>Data: </td>
                        </tr>
                        <tr>
                                <td><select name=produto.categoria.id">
                                    <c:forEach var="categoria" items="${listaCategorias}">
 					<option value="${categoria.id}">
 						<c:if test="${produto.categoria.id == categoria.id}"selected="true"></c:if>
 						${categoria.nome}
 					</option>
                                    </c:forEach>
                                </select></td>
                                <td><input maxlength="25" size="35" name="produto.data"></td>
                        </tr>
                        
                    </table>
                    <input type="submit" name="Cadastrar"/>
        </form>
        </div>
    </body>
</html>

O ProdutoLogic

mport br.com.projeto.loja.DaoInterceptor;
import br.com.projeto.modelo.Categoria;
import br.com.projeto.modelo.Fornecedor;
import br.com.projeto.modelo.Produto;
import br.com.projeto.modelo.dao.DaoFactory;
import java.util.List;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.InterceptedBy;

/**
 *
 * @author Bruno Wilson
 */
    @Component
@InterceptedBy({AutorizadorInterceptor.class, DaoInterceptor.class})
public class ProdutoLogic {


    private final DaoFactory daoFactory;
    private List<Produto> produtos;

    

    public ProdutoLogic(DaoFactory daoFactory) {
        this.daoFactory = daoFactory;
    }

    public void adiciona(Produto produto) {
        this.daoFactory.beginTransaction();
        this.daoFactory.getProdutoDao().adiciona(produto);
        this.daoFactory.commit();

    }

    public void remove(Produto produto) {
        this.daoFactory.beginTransaction();
        this.daoFactory.getProdutoDao().remove(produto);
        this.daoFactory.commit();
    }

    public void formulario() {
    }

    public List<Produto> getProdutos() {
        return produtos;
    }

     public List<Fornecedor> getListaFornecedores() {
        return this.daoFactory.getFornecedorDao().listaTudo();
    }

    public List<Categoria> getListaCategorias() {
        return this.daoFactory.getCategoriaDao().listaTudo();
    }

    public void lista() {
        produtos = this.daoFactory.getProdutoDao().listaTudo();
    }
}

A classe Produto

import java.util.Date;
import javax.persistence.*;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

/**
 *
 * @author Bruno Wilson
 */
@Entity
public class Produto {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name="id_produto")
    private Long id;

    @Column(name="nome_produto",
    unique=true, nullable=false,
    insertable=true, updatable=true,
     length=30)
    private String nome;

    @Column(nullable=false,
    insertable=true, updatable=true,
     length=30)
    private String modelo;

     @Column(nullable=false,
    insertable=true, updatable=true,
     length=30)
    private String marca;

    @Column(nullable=false,
    insertable=true, updatable=true)
    private double vlvenda;

    @Column(nullable=false,
    insertable=true, updatable=true)
    private double vlcompra;

    @Column(nullable=false,
    insertable=true, updatable=true)
    private int quantidade;

    @Column(name="data_cadastro",
    nullable=false,
    insertable=true, updatable=true)
    @Temporal(TemporalType.TIMESTAMP)
    private Date data;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="id_categoria",
     insertable=true, updatable=true)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.SAVE_UPDATE)
    private Categoria categoria;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="id_fornecedor",
    insertable=true, updatable=true)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.SAVE_UPDATE)
    private Fornecedor fornecedor;


    @Column(unique=false, nullable=false,
    insertable=true, updatable=true,
     length=10)
    private String status;

    public Produto() {
    }

    public Categoria getCategoria() {
        return categoria;
    }

    public void setCategoria(Categoria categoria) {
        this.categoria = categoria;
    }

    public Date getData() {
        return data;
    }

    public void setData(Date data) {
        this.data = data;
    }

    public Fornecedor getFornecedor() {
        return fornecedor;
    }

    public void setFornecedor(Fornecedor fornecedor) {
        this.fornecedor = fornecedor;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getMarca() {
        return marca;
    }

    public void setMarca(String marca) {
        this.marca = marca;
    }

    public String getModelo() {
        return modelo;
    }

    public void setModelo(String modelo) {
        this.modelo = modelo;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(int quantidade) {
        this.quantidade = quantidade;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public double getVlcompra() {
        return vlcompra;
    }

    public void setVlcompra(double vlcompra) {
        this.vlcompra = vlcompra;
    }

    public double getVlvenda() {
        return vlvenda;
    }

    public void setVlvenda(double vlvenda) {
        this.vlvenda = vlvenda;
    }

    
}

O meu dao

public class DaoFactory {

    private final Session session;
    private Transaction transaction;

    public DaoFactory() {
        session = HibernateUtil.getSession();
    }

    public void beginTransaction() {
        this.transaction = this.session.beginTransaction();
    }

    public void commit() {
        this.transaction.commit();
        this.transaction = null;
    }

    public boolean hasTransaction() {
        return this.transaction != null;
    }

    public void rollback() {
        this.transaction.rollback();
        this.transaction = null;
    }

    public void close() {
        this.session.close();
    }

    public UsuarioDao getUsuarioDao() {
        return new UsuarioDao(this.session);
    }

    public Dao<Categoria> getCategoriaDao() {
        return new Dao<Categoria>(this.session, Categoria.class);
    }

    public Dao<Fornecedor> getFornecedorDao() {
        return new Dao<Fornecedor>(this.session, Fornecedor.class);
    }

    public Dao<Produto> getProdutoDao() {
        return new Dao<Produto>(this.session, Produto.class);
    }

     public Dao<TipoPgto> getTipoPgtoDao() {
        return new Dao<TipoPgto>(this.session, TipoPgto.class);
    }
}

13 Respostas

brunowc

Ah, eu estou conseguindo inserir sem problemas nas outras classes, só esta que está dando problema
Valeu galera !

Lagaffe

Aparentemente está faltando uma aspa:

Você escreveu: <select name=produto.categoria.id">

quando é: <select name="produto.categoria.id">

brunowc

Lagaffe , realmente estava sem as aspas… mas mesmo assim continua com o problema …

O que será que ta de errado pessoal ?

Paulo_Silveira

oi bruno!

voce sabe dar mais detalhes? da um erro? o que acontece exatamente? tem stacktrace?

voce debugou?

abracos!

brunowc

Entao, nao chega a aparecer erro nenhum … simplesmente a combo nao é preenchida …

brunowc

Entao… nao aparece erro nenhum, simplesmente a Combo nao é preenchida com os Fornecedores e as Categorias para serem selecionadas para cadastrar o produto …

Existe uma outra maneira pra eu fazer o cadastro do produto no jsp ?

Lagaffe

Onde está escrito:

# <tr> <td><input maxlength="25" size="35" name="produto.quantidade"></td> <td><select name=produto.fornecedor.id"> <c:forEach var="fornecedor" items="${ListaFornecedores}"> <option value="${fornecedor.id}"> <c:if test="${produto.fornecedor.id == fornecedor.id}"></c:if> ${fornecedor.nome} </option> </c:forEach> </select> </td> </tr>

escreva:

<td><input maxlength="25" size="35" name="produto.fornecedor"></td>
	<td><select name="produto.fornecedor.id" id="fornecedor">
		 <c:forEach var="fornecedor" items="${ListaFornecedores}">
		  <option value="${fornecedor.id}"
		   <c:if test="${produto.fornecedor.id == fornecedor.id}">selected="true"</c:if>>
		   	<c:out value="${fornecedor.nome}"/>
		  </option>
		 </c:forEach>
		</select>
	  </td>
brunowc

…continua nao aparecendo …, o que aparece no combo agora é “>selected=“true”” rsrs

Lagaffe

Bruno

Você pode postar de novo o .jsp para ver como ficou?

Deve ser um erro de fechamento de tag.

Lagaffe

Outro detalhe que só vi agora:

na linha: <c:forEach var="fornecedor" items="${ListaFornecedores}">

o listaFornecedores tem que começar com l minúscula.

Guilherme_Silveira

Clicando da direita e vendo o código html gerado, a tag “c:forEach” foi interpretada?
Vendo o código postado me parece que faltou incluir a referência para a taglib c no cabeçalho da página.

Abraco

brunowc

Pessoal ,desculpe a demora pra responder, VOCES SAO DEMAIS,
Era realmente a referencia pra taglib que tava faltando !!

Muito obrigado a todos que ajudaram !!

brunowc

Pessoal ,desculpe a demora pra responder, VOCES SAO DEMAIS,
Era realmente a referencia pra taglib que tava faltando !!

Muito obrigado a todos que ajudaram !!

Criado 1 de setembro de 2009
Ultima resposta 9 de set. de 2009
Respostas 13
Participantes 4