[resolvido] - vraptor nÃo redireciona para view

15 respostas
F

Olá pessoal.

Tou com um erro no meu projeto usando o vraptor.

Eu tenho o seguinte método no meu Controller

@RestritoDiretor
	@Post
	@Path("/diretor/adiciona")	
	public void adiciona(final Diretor diretor, final Usuario usuario){
		validador.validate(diretor);
		validador.validate(usuario);
		validador.onErrorUsePageOf(IndexController.class).novoDiretor();
		daoDiretor.adiciona(diretor);
		usuario.setTipoUsuario(1);
		usuario.setNome(diretor.getNome());
		daoUsuario.adiciona(usuario);
		usuarioWeb.login(usuario);
		result.redirectTo(this).inicio();
	}

eu já debuguei o código mas ele sempre dá erro quando vai redirecionar para a view do método inicio.

o log do erro é esse:

org.hibernate.TransactionException: Transaction not successfully started

org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:131)

br.com.caelum.vraptor.util.hibernate.HibernateTransactionInterceptor.intercept(HibernateTransactionInterceptor.java:50)

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.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.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)

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:23)

br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)

br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)

br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.32 logs.

alguma dica?

ele salva todos os dois objetos no banco sem problema.

15 Respostas

rodrigocolasso

O que é aquele usuarioWeb.login(usuario); ?

Pq parece que você chama o método e depois manda redirecionar, mas será que nesse método também não tem redirecionamento.

Posso estar falando bobagem pq nunca mexi com esse framework só li na apostila da caelum, mas pode ser uma ideia … :lol:

F

não. olha a classe UsuarioWeb.

não tem nenhum redirecionamento.

@Component
@SessionScoped
public class UsuarioWeb {

	private Usuario usuarioLogado;
	
	public void login(Usuario usuario){
		this.usuarioLogado = usuario;
	}
	
	public void logout(){
		this.usuarioLogado = null;
	}
	
	public Boolean isLogado(){
		return this.usuarioLogado != null;
	}
	
	public int getTipoUsuario(){
		return this.usuarioLogado.getTipoUsuario();
	}
	
	public String getNome(){
		return this.usuarioLogado.getNome();
	}
	
}
rodrigocolasso

A ta blz, mas aquele metodo inicio para qual você esta redirecionamento… ele manda para onde ? Pode mostrar o código dele ?

F
@RestritoDiretor
	@Get
	@Path("/diretor/inicio")
	public void inicio(){
		
	}

se eu tentar acessar a URL /diretor/inicio

ele mostra tudo direitinho e com o usuário q foi cadastrado já logado.

rodrigocolasso

Felipe, eu lembro ter visto que o construtor da classe deve recer o result, você implementou isso no seu código ?

e se em vez de você fazer result.redirectTo(this).inicio(); você tentar colocar a classe result.redirectTo(NomeDaClasse.class).inicio();

Pode ser um erro do framework, se não isso não vou poder te ajudar muito.

F

não não era isso…

e sim eu recebo o result no meu construtor.

rodrigocolasso

Desculpe então acho que não vou poder ajudar …

Cara tem como você colocar todos os código que você utiliza nesse fluxo só para dar uma checada geral …

C

Essas inserções que você está fazendo no BD estão realmente funcionando? Pois pelo início do teu LOG está dando erro no Hibernate, parece que ele não está conseguindo iniciar a transação.

F

sim se eu for lá no banco elas estao lá…

Lucas_Cavalcanti

vc tá controlando transações na mão? tá usando o componente do vraptor que cria as sessions?

F

tou usando o context-param q já cria a session e o session factory que você me indicou um dia desses (acho q vc não se lembra)

Lucas_Cavalcanti

mas vc tá abrindo transação no meio do seu código? se sim, não faça isso, o componente do context-param já faz isso pra vc. O erro é pq tem transação sendo aberta dentro de outra transação

F

lucas eu faço isso no meu dao.

Transaction tx = sessao.beginTransaction();
sessao.save(t);
tx.commit();

é isso q não tenho q fazer?

Lucas_Cavalcanti

exato. tire todo o código de abrir e commitar transação

F
sessao.save(t);

Pronto Lucas testei e deu certo. tirei esses códigos…

vlws cara… vou marcar como resolvido :smiley:

Criado 22 de julho de 2011
Ultima resposta 22 de jul. de 2011
Respostas 15
Participantes 4