VRaptor - FJ-28 - Lista de Produtos. [Resolvido]

12 respostas
O

Prezados, fazendo o estudo dessa apostila, mas notei um problema na minha aplicação ao mudar de página na lista de produtos da aplicação. Sempre que eu entro na Lista de produtos e tento ir para outra, tudo para… Só reiniciando a aplicação que o sistema volta a funcionar. O estranho é que consigo normalmente fazer os cadastros, quantas vezes quiser. Mas se eu executar a lista e depois ir pra qualquer outro lugar na aplicação o problema se repete.

No Log, chego à esse momento sempre que tento sair da tela, e não apresenta mais nenhum erro:

17:02:19,744 DEBUG [VRaptor             ] VRaptor received a new request
17:02:19,774 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor
17:02:19,774 DEBUG [DefaultResourceTranslator] trying to access /produtos/formulario
17:02:19,774 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: ProdutosController.formularioProdutosController.formulario()]
17:02:19,776 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor
17:02:19,776 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InstantiateInterceptor

Obrigado desde já.

:wink:

12 Respostas

Lucas_Cavalcanti

como assim tudo para?

dá algum erro? a tela fica branca?

O

Lucas Cavalcanti:
como assim tudo para?

dá algum erro? a tela fica branca?

Não lucas, a tela fica parada, e ‘rodando’, aguardando algo que nunca vem…

abs.

Lucas_Cavalcanti

e o que aparece no log do servidor enquanto isso?

O

Após abrir a lista, eu limpo o console… Ae clico em outro link, o de cadastro por exemplo, ae o log que tenho até o ponto da trava, é esse:

17:02:19,744 DEBUG [VRaptor ] VRaptor received a new request 17:02:19,774 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor 17:02:19,774 DEBUG [DefaultResourceTranslator] trying to access /produtos/formulario 17:02:19,774 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: ProdutosController.formularioProdutosController.formulario()] 17:02:19,776 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor 17:02:19,776 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InstantiateInterceptor

OBS: A tela que fica exibindo é da lista aberta, aguardando ‘rodar’.

abs.

Lucas_Cavalcanti

como tá o seu método lista?

e como tá o lista.jsp?

O
Lucas Cavalcanti:
como tá o seu método lista?

e como tá o lista.jsp?

Segue abaixo o meu lista, mas não estou colocando as taglibs nela. To deixando por conta do header msm conforme apostila:

lista.jsp
<table>
	<thead>
		<tr>
			<th>Nome</th>
			<th>Descricao</th>
			<th>Preço</th>
		</tr>
	</thead>
	<tbody>
		<c:forEach items="${produtoList}" var="produto">
			<tr>
				<td>${produto.nome}</td>
				<td>${produto.descricao}</td>
				<td>${produto.preco}</td>
			</tr>
		</c:forEach>
	</tbody>
</table>
header.jspf
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%>
<html>
	<head>
		<title>Good Buy</title>
		<link href="<c:url value="/goodbuy.css"/>" rel="stylesheet" type="text/css" media="screen" />
		<link href="<c:url value="/javascripts/jquery.autocomplete.css"/>" rel="stylesheet" type="text/css" media="screen" />
		<script type="text/javascript" src="<c:url value="/javascripts/jquery-1.3.2.min.js"/>"></script>
		<script type="text/javascript" src="<c:url value="/javascripts/jquery.validate.min.js"/>"></script>
		<script type="text/javascript" src="<c:url value="/javascripts/jquery.autocomplete.min.js"/>"></script>
		<script type="text/javascript" src="<c:url value="/javascripts/jquery.puts.js"/>"></script>
		<fmt:setLocale value="pt_br"/>
	</head>
	
<body>
	<div id="header">
		
	</div>
	<div id="erros">
		<ul>
		</ul>
	</div>
	<div id="body">
		<div id="menu">		
			<ul>
				<li><a href="<c:url value="/produtos/formulario"/>">Novo Produto</a></li>
				<li><a href="<c:url value="/produtos/lista"/>">Lista Produtos</a></li>
			</ul>
		</div>
		<div id="content">
footer.jspf
</div><!-- div content -->
	</div><!-- div body -->
	<div id="footer">
	
	</div>

</body>
</html>
Lucas_Cavalcanti

e o método lista do controller?

O
Lucas Cavalcanti:
e o método lista do controller?

Segue a ProdutosController e a ProdutoDao:

ProdutosController
package br.com.caelum.goodbuy.controller;

import java.util.List;

import br.com.caelum.goodbuy.dao.ProdutoDao;
import br.com.caelum.goodbuy.modelo.Produto;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;

@Resource 
public class ProdutosController {
		
	private final ProdutoDao dao;
	private final Result result;
	
	public ProdutosController(ProdutoDao dao, Result result){
		this.dao = dao;
		this.result = result;
	}
	
	public List<Produto> lista(){
		return dao.listaTudo();
	}	
	
	public void adiciona(Produto produto){
		ProdutoDao dao = new ProdutoDao();
		dao.salva(produto);			
		result.redirectTo(this).lista(); //mesma coisa acima
	}
	
	// ----- Páginas: Métodos Genéricos
		
	public void formulario(){		
	}
	
}
ProdutoDao
package br.com.caelum.goodbuy.dao;

import java.util.List;

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

import br.com.caelum.goodbuy.infra.CriadorDeSession;
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 void salva(Produto produto) {		
		Transaction tx = session.beginTransaction();
		session.save(produto);
		tx.commit();
	}
	
	public List<Produto> listaTudo(){
		return this.session.createCriteria(Produto.class).list();
	}

}

abs!

Lucas_Cavalcanti

de qqer jeito pára no método lista ou só depois de uma adição?

O

Ele executa a lista. Apartir dae, ele pára o sistema seja qual for a página que eu queira abrir. Se eu clicar em qualquer coisa o erro prossegue. Mostrei pra um colega, rodando a aplicação na máquina dele, e ocorreu o mesmo problema.

Se puder te envio o projeto por email, talvez rodando na máquina o entedimento do problema seja melhor pra visualizar. Pode ser?

Abs e obrigado.

Lucas_Cavalcanti

não precisa enviar o projeto… tenta rodar o servidor em modo de debug e coloque um breakpoint no dao, método lista… veja se tá passando por lá…

se estiver tente ir pra próxima linha… acho que é aí que tá parado

O

Lucas Cavalcanti:
não precisa enviar o projeto… tenta rodar o servidor em modo de debug e coloque um breakpoint no dao, método lista… veja se tá passando por lá…

se estiver tente ir pra próxima linha… acho que é aí que tá parado

Lucas, acho que resolvi o problema. É a configuração do Hibernate (hibernate.cfg.xml): olha só como estava minha configuração:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
 <session-factory>

    <!-- Configuração para mostrar as instruções SQL gerado e formatado MySQL -->
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
	<property name="hibernate.connection.url">jdbc:mysql://localhost:3306</property>
	<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
	
    <property name="hibernate.connection.username">root</property> 		<!-- USER -->
    <property name="hibernate.connection.password"></property>     		<!-- SENHA -->
    <property name="hibernate.default_schema">vraptor_fj28</property>   <!-- NOME BANCO -->
    
    <property name="hibernate.hbm2ddl.auto">update</property> 

    <!-- Configuração para mostrar as instruções SQL gerado e formatado  -->
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>
       
    <!-- Mapeamento das classes TO persistentes  -->
    <mapping class="br.com.caelum.goodbuy.modelo.Produto" />

 </session-factory>
</hibernate-configuration>

Exclui a linha onde informava o nome do banco ‘separado’:

<property name="hibernate.default_schema">vraptor_fj28</property>   <!-- NOME BANCO -->

e deixei a linha da conexão da propriedade (hibernate.connection.url), de acesso ao banco, assim:

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/vraptor_fj28</property>

Agora a lista está normal. Peguei esse exemplo de conexão pelas ‘googladas’, mas pelo visto essas diferenças ae deram problemas no projeto final…

Agora ficou assim:

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
 <session-factory>

    <!-- Configuração para mostrar as instruções SQL gerado e formatado MySQL -->
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
	<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/vraptor_fj28</property>
	<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
	
    <property name="hibernate.connection.username">root</property> 		<!-- USER -->
    <property name="hibernate.connection.password"></property>     		<!-- SENHA -->    
    
    <property name="hibernate.hbm2ddl.auto">update</property> <!-- GERA TABELAS SE ELAS NÃO EXISTIREM! -->

    <!-- Configuração para mostrar as instruções SQL gerado e formatado  -->
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>
       
    <!-- Mapeamento das classes TO persistentes  -->
    <mapping class="br.com.caelum.goodbuy.modelo.Produto" />

 </session-factory>
</hibernate-configuration>

Muito Obrigado ae pela força!

Vlw mesmo!

Criado 10 de abril de 2012
Ultima resposta 11 de abr. de 2012
Respostas 12
Participantes 2