Bom dia!!
Tenho uma classe produto filha em 1-n da classe categoria. A categoria consegui gravar normalmente, agora para gravar o produto, para faze-lo preciso selecionar uma categoria que quero trazer na jsp por uma combobox, o cod_cat é fk em produto. Estou postando o código dos pojos, categoria e produto, dos dao categoria e produto e do trecho do código jsp onde chamo a combobox.
Esta dando o erro
org.apache.jasper.JasperException: javax.servlet.jsp.JspException: javax.faces.el.EvaluationException: Error getting property 'prod_cat' from bean of type beans.ProdutoFacade: java.lang.ClassCastException: beans.Categoria
as Classes
Produto
package beans;
import java.sql.Blob;
import java.util.ArrayList;
import java.util.Collection;
public class Produto {
private int cod_prod;
private String descricao;
private int qtde_est_min;
private int qtde_est_max;
private float valor_custo;
private float valor_revenda;
private Blob imagem;
private Collection<Categoria> prod_cat;
private ArrayList item_pedido = new ArrayList();
public Produto() {
}
public int getCod_prod() {
return cod_prod;
}
public void setCod_prod(int val) {
this.cod_prod = val;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String val) {
this.descricao = val;
}
public int getQtde_est_min() {
return qtde_est_min;
}
public void setQtde_est_min(int val) {
this.qtde_est_min = val;
}
public float getQtde_est_max() {
return qtde_est_max;
}
public void setQtde_est_max(int val) {
this.qtde_est_max = val;
}
public float getValor_custo() {
return valor_custo;
}
public void setValor_custo(float val) {
this.valor_custo = val;
}
public float getValor_revenda() {
return valor_revenda;
}
public void setValor_revenda(float val) {
this.valor_revenda = val;
}
public Blob getImagem() {
return imagem;
}
public void setImagem(Blob val) {
this.imagem = val;
}
public ArrayList getItem_pedido() {
return item_pedido;
}
public void setItem_pedido(ArrayList item_pedido) {
this.item_pedido = item_pedido;
}
public Collection<Categoria> getProd_cat() {
return prod_cat;
}
public void setProd_cat(Collection<Categoria> prod_cat) {
this.prod_cat = prod_cat;
}
}
PRODUTO FACADE
package beans;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import util.HibernateUtil;
/**
* @netbeans.hibernate.facade beanClass=beanslocadora.Carro
*/
public class ProdutoFacade {
private Produto produto;
private Collection<Categoria> prod_cat;
Session session;
public void saveProduto(Produto produto) {
try{
HibernateUtil.beginTransaction();
Session session = HibernateUtil.currentSession();
session.save(produto);
HibernateUtil.commitTransaction();
addMessage("Insert Produto Ok.");
}catch(Exception e){
addMessage("Erro insert Produto!");
}finally{HibernateUtil.closeSession();}
}
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public String criaProduto(){
if(this.getProduto()==null){
addMessage("Produto Nulo!");
return "produto_criar";
}else{
this.saveProduto(this.getProduto());
return "produto_criado";
}
}
public ProdutoFacade(){}
public String createSetup() {
this.setProduto(new Produto());
return "produto_criar";
}
public Produto findByDescricao(String descricao) {
Session session = HibernateUtil.currentSession();
String query1 ="from produto pf where pd.descricao = :descricao";
org.hibernate.Query query = session.createQuery(query1).setString("descricao", descricao).setMaxResults(1);
return (Produto) query.uniqueResult();
}
public List getProdutos() {
HibernateUtil.beginTransaction();
Session session = HibernateUtil.currentSession();
org.hibernate.Query query = session.createQuery(
"select object(o) from Produto o");
List list= query.list();
HibernateUtil.commitTransaction();
HibernateUtil.closeSession();
return list;
}
public String destroy() {
HibernateUtil.beginTransaction();
Session session = HibernateUtil.currentSession();
try{
produto = getProdutoFromRequestParam();
session.delete(produto);
HibernateUtil.commitTransaction();
addMessage("Delete Produto Ok.");
} catch (Exception ex) {
try {
addMessage("Erro excluir Produto");
} catch (Exception e) {System.out.println("erro em destroy");}
} finally{HibernateUtil.closeSession();}
return "produto_list";
}
public Produto getProdutoFromRequestParam() {
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest)ec.getRequest();
String descricao = request.getParameter("descricao");
return this.findByDescricao(descricao);
}
public static void addMessage(String msg) {
FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg);
FacesContext fc = FacesContext.getCurrentInstance();
fc.addMessage(null, facesMsg);
}
public String editSetup() {
setProdutoFromRequestParam();
return "produto_edit";
}
public void setProdutoFromRequestParam() {
Produto produto = getProdutoFromRequestParam();
this.setProduto(produto);
}
public String edit() {
HibernateUtil.beginTransaction();
Session session = HibernateUtil.currentSession();
try{
session.merge(produto);
HibernateUtil.commitTransaction();
addMessage("Atualizacao Produto Ok.");
} catch (Exception ex) {
try {
System.out.println("Erro Atualizacao Produto");
addMessage("Erro ao atualizar Produto");
} catch (Exception e) {System.out.println("Edicao Produto");}
} finally{ HibernateUtil.closeSession(); }
return "produto_list";
}
// Collection com Conversor
public Collection<Categoria> getProd_cat() throws HibernateException {
HibernateUtil.beginTransaction();
Session session = HibernateUtil.currentSession();
org.hibernate.Query query = session.createQuery(
"select object(o) from Categoria o");
List prod_cat= query.list();
Iterator objetos = prod_cat.iterator();
//prod_cat = new ArrayList();
for (int i = 0; i < prod_cat.size(); i++) {
Object[] tuple = (Object[])objetos.next();
Categoria categoria= new Categoria();
// categoria.setProd_cat((Integer)tuple[0]);
categoria.setDescricao((String)tuple[1]);
prod_cat.add(categoria);
}
//persistente no banco de dados
HibernateUtil.commitTransaction();
HibernateUtil.closeSession();
return prod_cat;
}
// ArrayList
/*public ArrayList<SelectItem> getListaCategorias() throws Throwable {
ArrayList<SelectItem> vlCat = new ArrayList();
try {
if (prod_cat == null)
for (int i = 0; i< prod_cat.length;i++)
vlCat.add(new SelectItem(String.valueOf(prod_cat[i].getCod_cat()), prod_cat[i].getDescricao()));
} catch (Throwable t) {
t.printStackTrace();
throw t;
}
return vlCat;
}*/
public void setProd_cat(Collection<Categoria> prod_cat) {
this.prod_cat = prod_cat;
}
}
CATEGORIA
package beans;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Categoria {
private int cod_cat;
private String descricao;
private Collection<Produto> prod_cat;
private Set cat_prod = new HashSet();
public Categoria() {
}
public int getCod_cat() {
return cod_cat;
}
public void setCod_cat(int val) {
this.cod_cat = val;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String val) {
this.descricao = val;
}
public void setCat_prod(ArrayList cat_prod) {
this.setCat_prod(cat_prod);
}
public void setCat_prod(Set cat_prod) {
this.cat_prod = cat_prod;
}
public Set getCat_prod() {
return cat_prod;
}
public Collection<Produto> getProd_cat() {
return prod_cat;
}
public void setProd_cat(Collection<Produto> prod_cat) {
this.prod_cat = prod_cat;
}
}
CATEGORIA FACADE
package beans;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import util.HibernateUtil;
public class CategoriaFacade {
private Categoria categoria;
Session session;
public void saveCategoria(Categoria categoria) {
try{
HibernateUtil.beginTransaction();
Session session = HibernateUtil.currentSession();
session.save(categoria);
HibernateUtil.commitTransaction();
addMessage("Categoria salva com sucesso.");
}catch(HibernateException e1){
throw e1;
//addMessage("Erro ao cadastrar categoria!");
}finally{HibernateUtil.closeSession();}
}
public String criaCategoria(Categoria categoria){
if (this.findByDescricao(categoria.getDescricao())==null)
{this.saveCategoria(categoria);
return "categoria_criada";
}else {
addMessage("Categoria ja existente!");
return "categoria_criar";
}
}
// Usando o atributo categoria
public String criaCategoria(){
if (this.findByDescricao(categoria.getDescricao())==null)
{this.saveCategoria(this.getCategoria());
return "categoria_criada";
}else {
addMessage("Categoria ja existente!");
return "categoria_criar";
}
}
public CategoriaFacade(){}
public Categoria getCategoria() {
return categoria;
}
public void setCategoria(Categoria categoria) {
this.categoria = categoria;
}
public String createSetup() {
this.setCategoria(new Categoria());
return "categoria_criar";
}
public Categoria findByDescricao(String descricao) {
try{
Session session = HibernateUtil.currentSession();
String query1 ="from Categoria c where c.descricao = :descricao";
org.hibernate.Query query = session.createQuery(query1).setString("descricao", descricao).setMaxResults(1);
Categoria categoria =(Categoria) query.uniqueResult();
return categoria;
}catch(HibernateException e)
{ //addMessage("Erro ao localizar categoria Aqui!");
throw e;
//return null;
}
}
public List getCategorias() {
try{
HibernateUtil.beginTransaction();
Session session = HibernateUtil.currentSession();
org.hibernate.Query query = session.createQuery(
"select object(o) from Categoria as o");
List list= query.list();
HibernateUtil.commitTransaction();
HibernateUtil.closeSession();
return list;
}catch(Exception e1){
addMessage("Erro em listar categorias!");
return null;
}
}
public String destroy() {
try{
HibernateUtil.beginTransaction();
Session session = HibernateUtil.currentSession();
Categoria categoria = getCategoriaFromRequestParam();
session.delete(categoria);
HibernateUtil.commitTransaction();
addMessage("Categoria deletada com sucesso.");
} catch (Exception ex) {
addMessage("Erro ao remover categoria!");
} finally{HibernateUtil.closeSession();}
return "categoria_list";
}
public Categoria getCategoriaFromRequestParam() {
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest)ec.getRequest();
String param = request.getParameter("descricao");
System.out.println("descricao em getCategoriaFromRqPar="+param);
return this.findByDescricao(param);
}
public static void addMessage(String msg) {
FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg);
FacesContext fc = FacesContext.getCurrentInstance();
fc.addMessage(null, facesMsg);
}
public String editSetup() {
setCategoriaFromRequestParam();
return "categoria_edit";
}
public void setCategoriaFromRequestParam() {
Categoria categoria = getCategoriaFromRequestParam();
if(categoria==null) System.out.println("categoria nulo");
setCategoria(categoria);
}
public String edit() {
try{
HibernateUtil.beginTransaction();
Session session = HibernateUtil.currentSession();
session.merge(categoria);
HibernateUtil.commitTransaction();
addMessage("Categoria atualizada com sucesso.");
} catch (Exception ex) {
try {
addMessage("Erro ao atualizar categoria!");
} catch (HibernateException e)
{throw e;}
/*{System.out.println("erro em edit categoria");}*/
}finally{ HibernateUtil.closeSession(); }
return "categoria_list";
}
}// fim da classe CategoriaFacade
Quem puder me auxiliar, fico muito grato