Problema no Redirect usando Vraptor 3.0.1 e o OC4J 10.1.3.1
5 respostas
pellegrino
Pessoal,
Estamos usando aqui o VRaptor 3.0.1, desenvolvendo uma aplicação utilizando o OC4J 10.1.3.1.Para demonstrar o erro, utilizando o vraptor-blank-project, apenas adicionei as seguintes linhas no index controller.
Ao acessar “/redirect”, com a aplicação deployada no OC4J eu tenho um erro 500 causado por uma java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;
O VRaptor 3 foi feito usando servlet 2.5 e usamos o context.getContextPath, que so entrou no servlet 2.5. Basta voce mudar o componentes para request.getContextPath. Alias, se funcionar, e forem poucos pontos de mudanca para que o Vraptor funcione com 2.4, vamos fazer isso!
Crie uma classe que extends DefaultLogicResult para reescrever o metodo redirectTo da seguinte maneira:
@ComponentpublicclassPellegrinoLogicResultextndsDefaultLogicResult{publicPellegrinoLogicResult(Proxifierproxifier,Routerrouter,ServletContextcontext,MutableRequestrequest,HttpServletResponseresponse,TypeCreatorcreator,Containercontainer,PathResolverresolver){/// chama o super tambem!!! ja que ta privadothis.proxifier=proxifier;this.response=response;this.context=context;this.request=request;this.router=router;this.creator=creator;this.container=container;this.resolver=resolver;}public<T>TredirectTo(finalClass<T>type){returnproxifier.proxify(type,newMethodInvocation<T>(){publicObjectintercept(Tproxy,Methodmethod,Object[]args,SuperMethodsuperMethod){if(!acceptsHttpGet(method)){thrownewIllegalArgumentException("Your logic method must accept HTTP GET method if you want to redirect to it");}try{Stringpath=request.getContextPath();Stringurl=router.urlFor(type,method,args);includeParametersInFlash(type,method,args);response.sendRedirect(path+url);returnnull;}catch(IOExceptione){thrownewProxyInvocationException(e);}}});}
talvez voce tenha de copiar metodos privados. codigo aqui:
Comecei a testar o VRaptor usando Servlet 2.3 (OC4J 10.1.2.3.0) e acabei conseguindo rodar usando o Pico Container, porém não testei todos os recursos, apenas rodei o vraptor-blank.
Você conhece algum relato parecido? É muita viagem minha tentar isso?
Valeu!
D
diego.pereira
Estou com o mesmo problema porem estou utilizando o Vraptor 3.4.0 e o mesmo não possui a classe br.com.caelum.vraptor.http.TypeCreator utilizada na classe criada pelo pellegrino (http://gist.github.com/218640) o que pode ser feito para que ela funcione na versão 3.4.0 do Vraptor.
Percebam que o problema se relaciona quanto ao método do form (GET/POST) então ... nestes termos ... resolvi somente assinando o método do controller com os 2 tipos de métodos.