[RESOLVIDO] vRaptor - Duvida sobre as URLs

11 respostas
tefo

Boa tarde galera!

por acaso eh possível mudar a URL depois de redirecionar para uma pagina?

Por exemplo, quando eu vou cadastrar um produto, após inclui-lo no banco de dados, eu redireciono para a pagina de listagem de produtos. E a URL fica (…)/incluirProduto/ mesmo estando na pagina de listagem recem redirecionada, soh que quando carrega a pagina de listagem de produtos eh executado tambem uma requisiçao ajax que para o seu retorno ter efeito eh necessario atualizar a pagina, mas teria que ser com a URL de listagem de produtos e nao a URL de incluir produtos pq senao vai tentar incluir de novo ao dar o refresh na pagina…

11 Respostas

Rafael_Guerreiro

Olhe se você não está fazendo um forwardTo para ir para a página de listagem.
Pois o forwardTo redireciona, mas não muda a url no browser… Já o redirectTo muda a url no browser…

tefo

eu preciso, imprescindivelmente, usar onErrorForwardTo… pois preciso que metodos sejam executados antes de retornar para as paginas…
existe alguma opçao de setar a URL ou alguma coisa do tipo?
ou o onErrorForwardTo pode me ajudar nisso?

Rafael_Guerreiro

Você pode usar o onErrorRedirectTo. Ele também executa o método antes. Os dois executam o método antes de retornar. A diferença está na URL.

tefo

eu fiz isso que vc disse, Guerreiro, e funcionou..

mas ta acontecendo uma coisa mto estranha no meu codigo e eu gostaria que alguem me explicasse o que esta acontecendo..
@Restrito
	@Get @Path("/novoMeioReceita")
	public List<Categoria> formulario() { 
		
		List<Categoria> categoriaList = cenDao.listarCategoriasPorTipo(this.usuarioWeb.getIdCenario(), DominioMeios.MEIO_RECEITA.getSigla());
		if(categoriaList == null || categoriaList.isEmpty()){
			validator.add(new ValidationMessage("Para criar um MEIO DE RECEITA, é necessário que antes você crie uma CATEGORIA para ele com o tipo 'Receita'!", "ALERTA"));
			try{
				validator.onErrorForwardTo(CategoriaController.class).formulario();
			}catch (ValidationException e) {
				System.out.println(e.getClass()+" - Nao foi possivel manter o redirecionamento na pagina: MeioReceitaController.formulario()");
			}
		}
		
		//retornar somente categorias do tipo REC e do cenario this.usuarioWeb.getIdCenario()
		return cenDao.listarCategoriasPorTipo(this.usuarioWeb.getIdCenario(), DominioMeios.MEIO_RECEITA.getSigla());
	}
este metodo acima cai dentro to TRY, logo em seguida cai no CATCH e naturalmente depois cai no return.. mas o metodo formulario() que eh chamado dentro do TRY eh executado e consequentemente sua pagina eh mostrada.. e o erro abaixo o acompanha:
GRAVE: Servlet.service() for servlet default threw exception
br.com.caelum.vraptor.InterceptionException: There are validation errors and you forgot to specify where to go. Please add in your method something like:
validator.onErrorUse(page()).of(AnyController.class).anyMethod();
or any view that you like.
If you didn't add any validation error, it is possible that a conversion error had happened.
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:71)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	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:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	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:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:680)
estou fazendo algo errado no redirecionamento?
Rafael_Guerreiro

Sim, está. É o seguinte, quando o validator encontrar um erro, ele vai lançar um ValidationException. Você não pode barrar(catch) essa exception (como você está fazendo) se não vc acaba com a funcionalidade. Adicione um “throw e” dentro do catch de ValidationException. E ai ele NÃO vai executar o return.

Essa é a ideia, deu erro, para tudo e trata o erro… A forma de tratar é redirecionando o usuário.

Lucas_Cavalcanti

você nao pode dar catch em ValidationException!!! o VRaptor usa essa exception pra controlar a validação.

tefo

bah, eu tava usando o try/catch quando eu usava onErrorUsePageOf, dai troquei de metodo e esqueci ele ali…
brigadao pela ajuda a todos!
ta bombando aki!!

Lucas, por acaso tem alguma previsao se vai ter alguma versao do vRaptor com JSF?

Rafael_Guerreiro

Eu queria poder curtir alguns comentários do Lucas, de tão bons que são.

Então, com JSF eu não sei. Acho que não. Mas vai sair o VRaptor 4… Esse vai ficar bem mais limpo… A gente vai programar menos ainda…

tefo

nossa!
ja eh bom de programar assim… imagina com a versao 4!!!

Lucas_Cavalcanti

a integração com JSF seria muito gambiarrada, pq o JSF foi feito pra trabalhar de um jeito totalmente diferente…

mas o que deve sair no vraptor deve ser plugins com componentes mais legais

tefo

Excelente! Parabéns aos desenvolvedores! =D

Criado 22 de outubro de 2012
Ultima resposta 22 de out. de 2012
Respostas 11
Participantes 3