Buenas a todos.
Semana passada atualizei a versão do VRaptor para a 3.1 (usava a 3.0.2).
Durante os testes que estava fazendo, obtive a seguite exception:
java.lang.IllegalStateException: Some request parameter has the same name as a request attribute. It shouldn't happen, please report this bug.
br.com.caelum.vraptor.validator.DefaultOutjector.castMap(DefaultOutjector.java:86)
br.com.caelum.vraptor.validator.DefaultOutjector.outjectRequestMap(DefaultOutjector.java:56)
br.com.caelum.vraptor.validator.DefaultValidator.onErrorUse(DefaultValidator.java:62)
br.com.myapp.admin.controller.UsuarioController.salvar(UsuarioController.java:88)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:50)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.myapp.interceptor.AccessControllerInterceptor.intercept(AccessControllerInterceptor.java:53)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.myapp.interceptor.ModulosInterceptor.intercept(ModulosInterceptor.java:39)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.util.hibernate.HibernateTransactionInterceptor.intercept(HibernateTransactionInterceptor.java:45)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
Como a mensagem diz, não pode haver atributo e parâmetro com o mesmo nome dentro do request (não me perguntem o motivo dessa restrição).
Esse método (salvar) recebe um parâmetro do tipo Usuario, chamado “usuario”.
Logo, na JSP, eu uso: “usuario.id”, “usuario.nome” etc.
O que pega é que, caso ocorra um erro de validação, eu volto para a mesma JSP, enviando como atributo um objeto da classe Usuario, coincidentemente chamado “usuario”, pois meus inputs estão assim:
<input type="text" name="usuario.nome" value="${usuario.nome}"/>
Dei uma olhada no código da classe DefaultOutjector, mas não compreendi muito bem seu funcionamento, o que limita minha “ajuda” apenas à detecção do problema.
Para contornar o problema, simplesmente alterei o nome do atributo que passo no result.include(…), e não ocorre mais a exception!
O estranho é que, mesmo sem alterar a JSP (o atributo “value” dos meus inputs ainda estão com “${usuario.nome}”), ao retornar para a página os campos são carregados normalmente, como se eu ainda estivesse fazendo:
this.result.include("usuario", usuario);
sendo que na realidade, estou fazendo:
this.result.include("usuarioA", usuario);
Sinistro… :shock:

