Olá, essa é minha primeira postagem. Geralmente eu busco informaçoes no forum, mas não encontrei nada parecido.
Meu problema é o seguinte. eu tenho um sistema em que eu aplico um questionário.
Eu uso o jquery para carregar uma página com uma pergunta usando o $.load().
Quando a página carrega eu carrego a primeira questão
$("#divQuestao1").load("/nemda2/questoes/buscar/${idQuestionario}/1",function(){
$("#ordem1").fadeIn();
});
E quando a pessoa responde e clica em avançar, eu carrego a segunda. Quando ele volta e avança, a questão já está carregada, ou seja, só carrega uma vez.
$("#divQuestao"+ordemQuestao).load("/nemda2/questoes/buscar/"+idQuestionario+"/"+ordemQuestao, function(){
aviso("Sucesso", "Proxima pergunta");
});
Meu controller é esse:
@Path("questoes/buscar/{id}/{ordem}")
public void buscar(int id, int ordem) {
questionario = questionarioDao.get(id);
Map<String, Object> params = new HashMap<String, Object>();
params.put("questionario", questionario);
params.put("ordem", ordem);
List<Questoes> questoesList = questoesDao.listarWhereCollection(params);
Questoes questao = questoesList.iterator().next();
QuestoesModelo modelo;
try {
modelo = (QuestoesModelo) Class.forName("br.com.nemda.questoes." + tipoDao.get(questao.getTipoDeQuestoes().getId()).getNome()).newInstance();
List<Respostas> respostas = new ArrayList<Respostas>();
respostas.addAll(questao.getRespostases());
modelo.init(questao, questao.getQuestionario(), respostas);
Collections.sort(respostas, new RespostasIdComparator());
result.include("respostas", respostas);
result.include("questao", modelo);
if(modelo instanceof MistaMultipla)
result.redirectTo(this).mistaMultipla(modelo);
if(modelo instanceof MistaSimples)
result.redirectTo(this).mistaSimples(modelo);
if(modelo instanceof Multipla)
result.redirectTo(this).multipla(modelo);
if(modelo instanceof Numero)
result.redirectTo(this).numero(modelo);
if(modelo instanceof Quadro)
result.redirectTo(this).quadro(questoesList);
if(modelo instanceof Simples)
result.redirectTo(this).simples(modelo);
if(modelo instanceof Texto)
result.redirectTo(this).texto(modelo);
if(modelo instanceof TextoMultiplo)
result.redirectTo(this).textoMultiplo(modelo);
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void mistaSimples(QuestoesModelo modelo) {
// MistaSimples questao = (MistaSimples) modelo;
}
Dependendo do tipo da questão, eu redireciono pra página que monta ela, e então o jquery inclui na div.
Na máquina que eu desenvolvo está tudo normal, porem em outra máquina que fui testar, carrega a primeira questão, mas ao chamar a segunda, dá uma Exception.
Vou colocar o log que funciona na minha máquina e depois o log de quando ocorre o erro:
12:02:49,370 DEBUG [VRaptor ] VRaptor received a new request
12:02:49,374 DEBUG [DefaultRequestExecution] executing stack DefaultRequestExecution
12:02:49,400 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor
12:02:49,401 DEBUG [DefaultResourceTranslator] trying to access /questoes/buscar/1/2
12:02:49,403 DEBUG [VRaptorRequest ] Setting id with [1]
12:02:49,403 DEBUG [VRaptorRequest ] Setting ordem with [2]
12:02:49,404 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: QuestoesController.buscarQuestoesController.buscar(int, int)]
12:02:49,408 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor
12:02:49,409 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InterceptorListPriorToExecutionExtractor
12:02:49,415 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor HibernateTransactionInterceptor
12:02:49,419 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor MenuInterceptor
12:02:49,421 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor LoginInterceptor
12:02:49,423 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InstantiateInterceptor
12:02:49,449 DEBUG [LazyInterceptorHandler] Invoking interceptor ParametersInstantiatorInterceptor
12:02:49,450 DEBUG [OgnlParametersProvider] Applying id with [1]
12:02:49,468 DEBUG [OgnlParametersProvider] Applying ordem with [2]
12:02:49,469 DEBUG [OgnlParametersProvider] Applying _ with [1302879769358]
12:02:49,470 DEBUG [OgnlParametersProvider] cant find property for expression _ ignoring
12:02:49,470 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for QuestoesController.buscar(int, int) as [id, ordem]
12:02:49,471 DEBUG [ParametersInstantiatorInterceptor] Parameter values for [DefaultResourceMethod: QuestoesController.buscarQuestoesController.buscar(int, int)] are [1, 2]
12:02:49,474 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor
12:02:49,476 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExecuteMethodInterceptor
12:02:49,477 DEBUG [ExecuteMethodInterceptor] Invoking QuestoesController.buscar(int, int)
Hibernate: select questionar0_.id as id13_0_, questionar0_.ativo as ativo13_0_, questionar0_.id_cliente as id7_13_0_, questionar0_.descricao as descricao13_0_, questionar0_.ip as ip13_0_, questionar0_.nome as nome13_0_, questionar0_.id_pesquisa as id8_13_0_, questionar0_.usuario as usuario13_0_ from mdapesqu_nemda2.questionario questionar0_ where questionar0_.id=?
Hibernate: select this_.id as id28_0_, this_.descricao as descricao28_0_, this_.max_respostas as max3_28_0_, this_.nome as nome28_0_, this_.ordem as ordem28_0_, this_.id_questionario as id6_28_0_, this_.id_tipo as id7_28_0_ from mdapesqu_nemda2.questoes this_ where this_.ordem=? and this_.id_questionario=?
Hibernate: select tipodeques0_.id as id15_0_, tipodeques0_.nome as nome15_0_, tipodeques0_.quantidades_respostas as quantida3_15_0_, tipodeques0_.resposta_inteira as resposta4_15_0_ from mdapesqu_nemda2.tipo_de_questoes tipodeques0_ where tipodeques0_.id=?
Hibernate: select respostase0_.id_questao as id5_1_, respostase0_.id as id1_, respostase0_.id as id29_0_, respostase0_.descricao as descricao29_0_, respostase0_.id_entrevista as id4_29_0_, respostase0_.id_aberto as id3_29_0_, respostase0_.id_questao as id5_29_0_ from mdapesqu_nemda2.respostas respostase0_ where respostase0_.id_questao=?
12:02:49,505 DEBUG [DefaultLogicResult ] redirecting to class QuestoesController
12:02:49,507 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for QuestoesController.simples(QuestoesModelo) as [modelo]
12:02:49,507 DEBUG [DefaultLogicResult ] redirecting to /nemda2/questoes/simples
12:02:49,509 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ForwardToDefaultViewInterceptor
12:02:49,509 DEBUG [ForwardToDefaultViewInterceptor] Request already dispatched and commited somewhere else, not forwarding.
12:02:49,514 DEBUG [VRaptor ] VRaptor ended the request
Agora com o erro:
11:48:17,205 DEBUG [VRaptor ] VRaptor received a new request
11:48:17,208 DEBUG [DefaultRequestExecution] executing stack DefaultRequestExecution
11:48:17,238 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor
11:48:17,239 DEBUG [DefaultResourceTranslator] trying to access /questoes/buscar/1/2
11:48:17,245 DEBUG [VRaptorRequest ] Setting id with [1]
11:48:17,246 DEBUG [VRaptorRequest ] Setting ordem with [2]
11:48:17,246 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: QuestoesController.buscarQuestoesController.buscar(int, int)]
11:48:17,249 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor
11:48:17,251 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InterceptorListPriorToExecutionExtractor
11:48:17,254 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor HibernateTransactionInterceptor
11:48:17,259 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor MenuInterceptor
11:48:40,705 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor LoginInterceptor
11:48:42,803 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InstantiateInterceptor
11:48:43,352 DEBUG [LazyInterceptorHandler] Invoking interceptor ParametersInstantiatorInterceptor
11:48:43,353 DEBUG [ParametersInstantiatorInterceptor] Parameter values for [DefaultResourceMethod: QuestoesController.buscarQuestoesController.buscar(int, int)] are [br.com.nemda.questoes.Simples@f84033]
11:48:43,425 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor
11:48:43,485 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExecuteMethodInterceptor
11:48:43,487 DEBUG [ExecuteMethodInterceptor] Invoking QuestoesController.buscar(int, int)
11:48:54,250 DEBUG [DefaultExceptionMapper] find for exception class java.lang.IllegalArgumentException
Pelo que eu entendi, o vraptor está passando o parâmetro [br.com.nemda.questoes.Simples@f84033] quando deveria ser [1, 2].
Não sei porque isso ocorre em um computador e em outro não. Testei no meu notebook e funcionou.
Eu uso 2 interceptadores, um que cria um menu, e outro de login, mas não sei se infuencia em algo.
Alguem tem alguma idéia do que pode ser?