Problema submit Vraptor

13 respostas
C

Olá amigos...

estou com um problema ,ao fazer o submit de um formulario , deveria ser adicionado um produto ao Banco de Dados , mas ao invez disto esta retornando erro 500.

Formulario:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Insert title here</title>
</head>
<body>
<form action="adiciona">
       <fieldset>
           <legend>Adicionar Produto</legend>
           <label for="nome">Nome:</label>
           <input id="nome" type="text" name="produto.nome"/>
           <label for="descricao">Descrição:</label>
           <textarea id="descricao" name="produto.descricao"></textarea>
           <label for="preco">Preço:</label>
           <input id="preco" type="text" name="produto.preco"/>
           <button type="submit">Enviar</button>
       </fieldset>
</form>
</body>
</html>
Controller do Produto
package br.com.caelum.goodbuy.controller;

import java.util.List;

import br.com.caelum.goodbuy.infra.ProdutoDAO;
import br.com.caelum.goodbuy.modelo.Produto;
import br.com.caelum.vraptor.Resource;

@Resource
public class ProdutosController {
	private final ProdutoDAO dao;
	
	public void formulario(){
		
	}

	public ProdutosController(ProdutoDAO dao) {
		this.dao = dao;
	}

	public List<Produto> lista() {
		return dao.listaTudo();

	}
	
	public void adiciona(Produto produto){
		dao.salva(produto);
		
		
	}

}
O DAO
package br.com.caelum.goodbuy.infra;

import java.util.List;


import org.hibernate.Session;
import org.hibernate.Transaction;

import br.com.caelum.goodbuy.modelo.Produto;
import br.com.caelum.vraptor.ioc.Component;
@Component
public class ProdutoDAO {
	private final Session session;
	
	public ProdutoDAO() {
		this.session = CriadorDeSession.getSession();
	}
	 public List<Produto> listaTudo() {
	        return this.session.createCriteria(Produto.class).list();
	}
	
	public void salva(Produto produto) {
		Transaction tx = session.beginTransaction();
		session.save(produto);
		tx.commit();
	}
	
	public  void remove(Produto p) {
		Transaction tx = session.beginTransaction();
		session.delete(p);
		tx.commit();
	}
	
	public void alteraPreco(Produto p, double preco){
		Transaction tx = session.beginTransaction();
		p.setPreco(preco);
		session.update(p);
		
		tx.commit();

		
	}
	


}
e a classe produto
package br.com.caelum.goodbuy.modelo;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Produto {
	@Id @GeneratedValue
	private Long id;
	
	private String nome;
	
	private String descricao;
	
	private Double preco;

	public Long getId() {
		return id;
	}

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

	public String getNome() {
		return nome;
	}

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

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Double getPreco() {
		return preco;
	}

	public void setPreco(Double preco) {
		this.preco = preco;
	}
	
	
	
	


}

13 Respostas

C

O mais estranho que ao testar local, obtive o mesmo problema o0

public class AdicaoDeProduto {
	public static void main(String[] args) {


		Session session = CriadorDeSession.getSession();
	
		Produto prateleira = criaProduto();
		
		new ProdutoDAO().salva(prateleira);
		
	}

	

	private static Produto criaProduto() {
		Produto prateleira = new Produto();
		
		prateleira.setNome("Furadeira BD");
		prateleira.setDescricao("Furadeira Black & Decker 220w");
		prateleira.setPreco(139.99);
		return prateleira;
	}

Segue a Stacktrace…nao existe Method?

Caused by: java.lang.NoSuchMethodError: org.hibernate.event.PreInsertEvent.getSource()Lorg/hibernate/engine/SessionImplementor; at org.hibernate.validator.event.ValidateEventListener.onPreInsert(ValidateEventListener.java:172) at org.hibernate.action.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:160) at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:65) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:320) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:713) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:701) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:697) at br.com.caelum.goodbuy.infra.ProdutoDAO.salva(ProdutoDAO.java:24) at br.com.caelum.goodbuy.controller.ProdutosController.adiciona(ProdutosController.java:27) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61) ... 41 more

Rafael_Guerreiro

A action do form está executando o método adiciona?

C

Sim , e como tentei local e me retornou o mesmo erro, creio que o problema seja no DAO, mas e estranho pq estava funcionando…

Lucas_Cavalcanti

Caused by: java.lang.NoSuchMethodError: org.hibernate.event.PreInsertEvent.getSource()Lorg/hibernate/engine/SessionImplementor;

isso geralmente é problema de conflito de versão de jars… vc deve estar com 2 versões do hibernate, ou com a versão errada dele.

C

Opa lucas , irei verificar assim que chegar da facul , mas creio que seja isto.

C

Acabei de ver lucas e estou somente com o Hibernate 4.0.1 …

Estes sao os Jars que tenho na minha Lib…

C

O Log4J tambem esta reclamando de algo.

log4j:WARN No appenders could be found for logger (org.hibernate.type.BasicTypeRegistry). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. Exception in thread "main" java.lang.NoSuchMethodError: org.hibernate.event.PreInsertEvent.getSource()Lorg/hibernate/engine/SessionImplementor; at org.hibernate.validator.event.ValidateEventListener.onPreInsert(ValidateEventListener.java:172) at org.hibernate.action.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:160) at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:65) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:320) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:713) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:701) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:697) at br.com.caelum.goodbuy.infra.ProdutoDAO.salva(ProdutoDAO.java:24) at br.com.caelum.goodbuy.testes.AdicaoDeProduto.main(AdicaoDeProduto.java:19)

Lucas_Cavalcanti

talvez o vraptor não seja compatível com o hibernate 4.x

tenta rodar com o 3.6.x, ou se você estiver dentro do jboss, simplesmente remova todos os jars do hibernate, ele já vai ter impl do hibernate lá dentro

C

Opa , assim que voltar da faculdade irei repor os jars , acabei deletando todos os jars e irei repor com a versão 3.6.x

C

Nem era isto…cansei , todo dia um problema com jar com isso com aquilo…

Vou ver se acho um material bom de JSF e Spring.

Lucas_Cavalcanti

Boa sorte então :wink:

só que esse problema não tem nada a ver com o VRaptor… se vc tirar o jar do VRaptor e colocar as coisas do spring e JSF vai acontecer a mesma coisa.

Bem vindo ao java, clash de versões diferentes de jar vão acontecer toda hora, vc precisa aprender a conviver com isso…

de novo, se vc estiver usando jboss, é só tirar o jar do hibernate que funciona, pq ele já está lá.

C

To usando Tomcat…cara eu ja mudei dos jars para a 3,6 e nada …nao to afim de refazer o “Projeto”

Lucas_Cavalcanti

pelas imagens que você mandou, só alguns dos jars estão no classpath…

vc colocou os jars na pasta WEB-INF/lib? está com jars referenciados no build path direto?

tire os jars referenciados, e jogue todos no WEB-INF/lib

Criado 28 de março de 2012
Ultima resposta 29 de mar. de 2012
Respostas 13
Participantes 3