Tenho no meu jsp um select que é populado com vários options com os valores que preciso, só que tenho que passar esses valores em forma de lista via Ajax para o Vraptor para poder executar minha Logic. Gostaria de saber como faço tal conversão ou qual convenção utilizo para passar esses dados em forma de lista da minha view para o java utilizando o vraptor. Atualmente utilizo o framework jquery para facilitar com a parte de JavaScript.
Segue um fragmento do código.
Cara valeu, estava empacado aqui num projeto por conta disso.
ACDias
Olá,
estou com o mesmo problema e não consegui implementar isto.
Estou fazendo uma requisição ajax e mandando os dados via post mas os dados não são passados no parâmetro.
var test = new Array();
test[0] = 'teste1';
test[1] = 'teste2';
test[2] = 'teste3';
$.post('/BackOffice/generic/teste', {'test': test}, function(data){alert(data);}, 'json');
No meu controller coloquei assim:
public void teste(List<String> test) {
result.use(json()).from(test.toArray()).serialize();
}
Tentei mandar o parametro com o nome de test e testList, mas nenhum funcionou.
Obrigado.
V
viniciodf
Também estou com o mesmo problema, idêntico ao post acima, alguém tem alguma idéia de como fazer?
G
garcia-jj
ACDias, qual o erro que dá? O que é impresso no alert? Algum stacktrace?
viniciodf, no seu caso, qual a mensagem de erro? Algo é impresso?
ACDias
Eu recebo um NullPointerException porque nada é passado como parâmetro para a action. Não tem alert porque ocorre erro na requisição.
Como o VRaptor associa os parâmetros da action com os do request? Pelo nome?
br.com.caelum.vraptor.InterceptionException: java.lang.NullPointerException
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:76)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:72)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.util.hibernate.HibernateTransactionInterceptor.intercept(HibernateTransactionInterceptor.java:45)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:887)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:696)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:2009)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
at br.com.cedro.controllers.GenericController.teste(GenericController.java:59)
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:50)
... 42 more
G
garcia-jj
Sim. O nome do parametro que você está enviando é injetado no parametro do método conforme o nome.
ACDias
Então o que poderia estar errado?
Eu não posso passar uma simples lista de strings?
Eu tentei passar seguindo a mesma convenção do VRaptor (adicionando o “list” ao final do nome) e não funcionou. Tentei com o mesmo nome e também não funcionou.
ACDias
Tentei com um array e funcionou. O VRaptor não tem suporte a listas para estes casos?
G
garcia-jj
Tem sim suporte a injetar listas. Eu uso assim, porém com campos de formulário e não via javascript. Estou um pouco desconfortável sobre como o jquery está enviando os dados. Eu tenho a impressão que ele não está mandando como deveria.
O correto é ele mandar um querystring como test[0]=teste0&test[1]=teste1, mas acho que ele esta enviando como test[0]=teste0,test[1]=teste1 (que é o resultado de um Array.toString no javascript. Detalhe: isso é um padrão do envio de parametros no querystring, e não limitação no vraptor.
Faça um teste e tente enviar como test[0]=teste0&test[1]=teste1 e veja se resolve. Caso sim já sabemos onde é o erro.
var test = 'test[0]=teste1&test[1]=teste2&test[2]=teste3'
$.post('/BackOffice/generic/teste', {'test': test}, function(data){alert(data);}, 'json');
Leandro-SP
Também estou com o mesmo problema.
Mas a dúvida é… e quando o meu controller está esperando um objeto do tipo Usuario… como “montar” o objeto “Usuario” a patir de dados de um formulario no jsp e enviar via ajax post para o controler?
@Path("/usuario")
public void adiciona(Usuario usuario) {
if (dao.existeUsuario(usuario)) {
validator.add(new ValidationMessage("Login já existe", "usuario.login"));
}
validator.onErrorUse(page()).of(UsuarioController.class).novo();
dao.adiciona(usuario);
result.redirectTo(UsuarioController.class).lista();
}