Pessoal, como a maioria deve saber a Caelum disponibilizou em seu site o download da apostila do curso Web 2.0 com VRaptor, Hibernate e Ajax.
Aproveitando isso, vi uma chance de aprender algo novo e como estou aprendendo gostaria de saber se alguém está lendo esta apostila e poderia me ajudar ?
Na página 53, existe um desafio, onde tenho que buscar todas as musicas de um CD ao clicar num link na lista de CD’s.
Criei o seguinte método, mas que está dando erro e não sei decifrar este erro. Veja o método:
public void listaPorCd(Cd cd){
this.musicas = (List<Musica>) this.daoFactory.getMusicaDao().procura(cd.getId());
}
Alguém conseguiu fazer e poderia me dar a dica ?
Valew.
Qual é o erro? Posta ele pra ficar mais fácil de ajudar! Arriscando um palpite, vc criou o método getMusicas()?
Sim, criei o método getMúsicas, pois o listarTudo() está funcionando.
O erro:
javax.servlet.ServletException: modelo.Musica$$EnhancerByCGLIB$$c43550f5
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:82)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
Valew.
Vc colocou o Servlet do VRaptor no web.xml? Posta o stackTrace inteiro.
Coloquei sim!!! O sistema está funcionando normal, o problema é só neste método de listarPorCd().
erro inteiro:
exception
javax.servlet.ServletException: modelo.Musica$$EnhancerByCGLIB$$55dd545a
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:82)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause
java.lang.ClassCastException: modelo.Musica$$EnhancerByCGLIB$$55dd545a
logic.MusicaLogic.listaPorCd(MusicaLogic.java:58)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:585)
org.vraptor.reflection.ReflectionUtil.invoke(ReflectionUtil.java:86)
org.vraptor.reflection.JavaMethod.invoke(JavaMethod.java:31)
org.vraptor.component.DefaultLogicMethod.execute(DefaultLogicMethod.java:122)
org.vraptor.interceptor.ExecuteLogicInterceptor.intercept(ExecuteLogicInterceptor.java:40)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.SettingAndValidationInterceptor.intercept(SettingAndValidationInterceptor.java:141)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.InjectionInterceptor.intercept(InjectionInterceptor.java:45)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.ComponentLookupInterceptor.intercept(ComponentLookupInterceptor.java:56)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
logic.DaoInterceptor.intercept(DaoInterceptor.java:17)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.RegisterAttributesInteceptor.intercept(RegisterAttributesInteceptor.java:57)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:89)
org.vraptor.core.VRaptorController.execute(VRaptorController.java:39)
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:57)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
Vc tem um método que intercepta esse getMusicasDao não é? Tenta colocar o código q ele utiliza na própria classe interceptada, só pra fazer um teste. Eu já tive problemas com o interceptor.
Mas, como a aplicação está rodando normalmente, com excessão do listaPorCd(), não conclui-se que o interceptor esteja normal ??
Caso vc ache q tenha q fazer esta mudança que vc sugeriu, teria como explicar melhor, por favor, pois não entendi nada !!! :oops:
Valew.
Onde eu posso achar todass as aqueles .jar da apostila?!?!?!
putz…to com o mesmo problema… não sei como resolver este desafio…
marceloplis, o seu erro está ocorrendo pois o método listaTudo do getMusicaDao pede uma música como argumento e você está tentando passar um cd…
alguém sabe por onde começar?! creio que a alteração deva ser feita apenas no MusicaLogic… mas não sei como colocar filtros para isto…
alguém já fez!??!
falou!
Resolvido:
Criar uma classe MusicaDao:
public class MusicaDao extends Dao<Musica>{
//Construtor
public MusicaDao (Session session){
super(session, Musica.class);
}
//Metodos
@SuppressWarnings("unchecked")
public List<Musica> listaPorCd(Cd cd){
List musicas = session.createCriteria(Musica.class)
.add(Restrictions.eq("cd.id", cd.getId()))
.list();
return musicas;
}
}
Alterar no DaoFactory o get do Dao da musica para:
public MusicaDao getMusicaDao(){
return new MusicaDao(this.session);
}
Criar Action na MusicaLogic:
public void listaPorCd(Cd cd){
this.musicas = this.daoFactory.getMusicaDao().listaPorCd(cd);
}
JSP listaPorCd.ok.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://displaytag.sf.net" prefix="display" %>
<!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">
<link rel="stylesheet" type="text/css" href="css/style.css"/>
<title>Lista de Músicas Por CD</title>
</head>
<body>
<%@include file="../menu.jsp" %>
<h1>Músicas</h1>
<display:table id="musica" name="${musicas}" requestURI="musica.listaPorCd.logic">
<display:column property="id"/>
<display:column property="cd.titulo" sortable="true" title="CD"/>
<display:column property="titulo" sortable="true"/>
<display:column property="preco" sortable="true"/>
<display:column>
<a href="musica.editar.logic?musica.id=${musica.id }">editar </a>
</display:column>
<display:column>
<a href="musica.remove.logic?musica.id=${musica.id }">remover </a>
</display:column>
</display:table>
</body>
</html>
Valew.