VRaptor + URL Externa

5 respostas
R

Senhores, bom dia.

Utilizando MyFaces, consigo fazer com que minha aplicação redirecione para uma URL externa utilizando, por exemplo:

FacesContext context = FacesContext.getCurrentInstance(); context.getExternalContext().redirect("http://www.google.com.br");

Existe a possibilidade de fazer o mesmo utilizando VRaptor? Tentei com:

response.sendRedirect("http://www.google.com.br");

Porém obtenho o seguinte:

java.lang.IllegalStateException: Cannot forward after response has been committed br.com.caelum.vraptor.view.DefaultPageResult.defaultView(DefaultPageResult.java:67) br.com.caelum.vraptor.interceptor.ForwardToDefaultViewInterceptor.intercept(ForwardToDefaultViewInterceptor.java:60) br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:85) br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:93) br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48) br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71) br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83) br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69) br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44) br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91) br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58) br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)

Ou seja, ele tenta fazer seu redirecionamento “normal” ao final do método, porém como utilizei o response.sendRedirect(…), tenho esse problema…

Tentei colocar um return; mas também não funcionou, ele tenta encontrar o .jsp com o nome do método, que não é o comportamento desejado.

Grato pela atenção!

PS.: Peço desculpas se já existe tópico semelhante, mas procurei e não achei nada.

5 Respostas

Lucas_Cavalcanti

você pode usar o:

result.redirectTo("http://google.com");
R

Lucas, obrigado por responder!

Tentei assim, porém ele tentou redirecionar para: http://localhost:8080/minhaApp/www.google.com.br

O que poderia ser?

R

Lucas, estava tentando com “www.google.com.br”, trocando por “http://google.com” funcionou. Mas não entendi a diferença para o VRaptor…

Lucas_Cavalcanti

isso não é comportamento especifico do vraptor, é de qualquer servidor web java…

A regra é essa:

redirect abc/def  => suaapp.com/pagina_anterior/abc/def

redirect /abc/def => suapp.com/abc/def

redirect http://abc.def  => http://abc.def
R

Lucas, muito obrigado! Mais um dia, mais um aprendizado! :smiley:

Criado 11 de outubro de 2012
Ultima resposta 11 de out. de 2012
Respostas 5
Participantes 2