VRaptor nao redireciona view

chamar a url… no controller? nao entendi muito bem… aqui vao os jsps

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Formulario de Login</title>
</head>
<body>

<h2>Login no Controle de Produtos</h2>
	<form action="<c:url value="/login/autentica"/>">
		Login: &lt;input id="login" type="text" name="usuario.login" value="${usuario.login}"/&gt;<br />
		Senha: &lt;input id="senha" type="password" name="usuario.senha" value="${usuario.senha}"/&gt;
		&lt;input type="submit" value="Autenticar" /&gt;
	&lt;/form&gt;

&lt;/body&gt;
&lt;/html&gt;

e tanto se cai dentro do if quanto fora tá indo pro lugar errado?

sim

e o que acontece, pra onde vai?

volta direto pra tela de login novamente

a classe UsuarioLogado está anotada com @SessionScoped?

vc tem algum interceptor que redireciona caso esteja sem login?

VRaptor e seus problemas … mas uma vez digo, nao vi uma vantagem em usar VRaptor ate hj …

God_of_Java, vantagem em relação a o que? sem uma referência sua afirmação é vazia, e não acrescenta nada na discussão nem na resposta das dúvidas das pessoas.

Jovem,
mandou muito bem.

sim… e esta anotada com SessionScope sim… quando o login nao é valido, eu redireciono para a tela de login denovo… da uma olhada;

package com.agenda.interceptors;

import br.com.caelum.vraptor.InterceptionException;
import br.com.caelum.vraptor.Intercepts;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.core.InterceptorStack;
import br.com.caelum.vraptor.interceptor.Interceptor;
import br.com.caelum.vraptor.resource.ResourceClass;
import br.com.caelum.vraptor.resource.ResourceMethod;

import com.agenda.controller.LoginController;
import com.agenda.infra.UsuarioLogado;

@Intercepts
public class LoginInterceptor implements Interceptor {
	private UsuarioLogado usuarioLogado;
	private Result result;
	
	public LoginInterceptor(UsuarioLogado usuarioLogado, Result result) {
		this.usuarioLogado = usuarioLogado;
		this.result = result;
	}
	
	@Override
	public void intercept(InterceptorStack stack, ResourceMethod method, Object instance) throws InterceptionException {
		if(usuarioLogado.getUsuarioLogado() != null) {
			stack.next(method, instance);
		} else {
			result.redirectTo(LoginController.class).formulario();
		}
	}
	
	@Override
	public boolean accepts(ResourceMethod method) {
		ResourceClass resource = method.getResource();
		return !resource.getType().isAssignableFrom(LoginController.class);
	}
}

e como está a classe UsuarioLogado?

package com.agenda.infra;

import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.SessionScoped;

import com.agenda.modelo.Usuario;
@Component
@SessionScoped
public class UsuarioLogado {
	private Usuario usuarioLogado;
		
	public void efetuaLogin(Usuario usuario) {
			this.setUsuarioLogado(usuario);
	}

	public void setUsuarioLogado(Usuario usuarioLogado) {
		this.usuarioLogado = usuarioLogado;
	}

	public Usuario getUsuarioLogado() {
		return usuarioLogado;
	}
		

}

sobe o servidor em modo de debug e coloque breakpoints nos métodos do UsuarioLogado.

veja se dentro do login ele seta direitinho o usuario e se qdo passa no iinterceptor o usuario ainda está lá

coloquei… gerou umas exceptions estranhas, depois voltei ao modo normal. rodou… so to tendo uns probleminhas com o ajax pra excuir e editar os contatos, provavelmente vou voltar em breve, mas muito obrigado pela ajuda;

agora… usando as anotações path,e tetando colocar o projeto, no padrão REST, anotei meus controllers… mas agora, com a as uri’s novas e tambem com as antigas, levo um 404; como ficaram meus controllers

package com.agenda.controller;

import java.util.List;

import br.com.caelum.vraptor.Delete;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Put;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;

import com.agenda.dao.ContatoDAO;
import com.agenda.modelo.Contato;

@Resource
public class ContatosController {
	private final ContatoDAO dao;
	private final Result result;
	
	public ContatosController(ContatoDAO dao, Result result) {
		this.dao = dao;
		this.result = result;
	}
	
	@Post @Path("/contatos")
	public void adiciona(Contato contato) {
		dao.adiciona(contato);
		result.redirectTo(this).lista();
	}

	@Delete @Path("/contatos/{id}")
	public void exclui(Long id) {
		Contato contato = dao.carrega(id);
		dao.exclui(contato);
		result.redirectTo(this).lista();
	}
	
	@Put @Path("/contatos/{contato.id")
	public void atualiza(Contato contato) {
		dao.atualiza(contato);
		result.redirectTo(this).lista();
	}
	
	@Get @Path("contatos/{id}")
	public Contato edita(Long id){
		return dao.carrega(id);
	}
	
	@Path("/produtos")
	public List&lt;Contato&gt; lista() {
		return dao.listaTudo();
	}
	
	@Get @Path("/contatos/novo")
	public void formulario(){}
}
package com.agenda.controller;

import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;

import com.agenda.dao.UsuarioDAO;
import com.agenda.infra.UsuarioLogado;
import com.agenda.modelo.Usuario;

@Resource
public class LoginController {
	private UsuarioDAO usuarioDao;
	private UsuarioLogado usuarioLogado;
	private Result result;

	public LoginController(UsuarioDAO usuarioDao, UsuarioLogado usuarioLogado, Result result) {
		this.usuarioDao = usuarioDao;
		this.usuarioLogado = usuarioLogado;
		this.result = result;
	}

	public void autentica(Usuario usuario) {
		Usuario autenticado = usuarioDao.buscaUsuarioPorLoginESenha(usuario);
		if (autenticado != null) {
			usuarioLogado.efetuaLogin(autenticado);
			result.redirectTo(ContatosController.class).lista();
			return;
		}
		result.redirectTo(LoginController.class).formulario();
	}
	
	@Path("/")
	public void formulario() {
	}

}

a url “/contatos/novo” funciona?

tome cuidado com os verbos HTTP agora… por exemplo o método exclui só pode ser chamado com o verbo http DELETE ou com o parâmetro _method=DELETE (dentro de um post)

nao funciona… tomo 404 ja; e nenhuma nota de debug ou exception;

habilite o log de debug do vraptor, e olhe no log qdo vc inicia o servidor.

no finalzinho deve ter algo parecido com:

16:03:02,687  INFO [DefaultRouteBuilder ] /index                                            [GET] -> HomeController.index()
16:03:02,691  INFO [DefaultRouteBuilder ] /contatos/novo                                      [GET] -> ContatosController.formulario()

contendo todos as urls dos controllers.
isso aparece?

Meu post não tem muito a ver com tua dúvida, mas ao invés de usar um sistema proprio de login, porque você não usa JAAS? Assim vocẽ não precisa criar nada, basta configurar o serviço com o tipo de autenticação que você precisa (LDAP, banco de dados, certificado), indicar as roles, e tudo pronto.

sim. era um erro de digitação. mas agora; quando eu chamo meu formulario de entrada de contatos; recebo uma MethodNotAllowedException… estou fazendo uma confusão com os metodos http; olha a stack

17:23:58,372 DEBUG [VRaptor ] VRaptor received a new request
17:23:58,387 DEBUG [VRaptorApplicationContext] Cache miss for interface br.com.caelum.vraptor.http.EncodingHandler
17:23:58,396 DEBUG [VRaptorApplicationContext] Cache miss for class br.com.caelum.vraptor.http.EncodingHandlerFactory
17:23:58,402 DEBUG [VRaptorApplicationContext] Cache miss for interface br.com.caelum.vraptor.core.RequestExecution
17:23:58,419 DEBUG [DefaultRequestExecution] executing stack DefaultRequestExecution
17:23:58,422 DEBUG [VRaptorApplicationContext] Cache miss for interface br.com.caelum.vraptor.interceptor.multipart.MultipartInterceptor
17:23:58,500 DEBUG [VRaptorApplicationContext] Cache miss for class br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor
17:23:58,516 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor
17:23:58,516 DEBUG [DefaultResourceTranslator] trying to access /contatos/formulario
17:23:58,531 DEBUG [ResourceLookupInterceptor] Method GET is not allowed for requested URI. Allowed Methods are [PUT, DELETE]
br.com.caelum.vraptor.http.route.MethodNotAllowedException: Method GET is not allowed for requested URI. Allowed Methods are [PUT, DELETE]
at br.com.caelum.vraptor.http.route.DefaultRouter.routesMatchingUriAndMethod(DefaultRouter.java:110)
at br.com.caelum.vraptor.http.route.DefaultRouter.parse(DefaultRouter.java:83)
at br.com.caelum.vraptor.http.DefaultResourceTranslator.translate(DefaultResourceTranslator.java:59)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:64)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:550)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:380)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
17:23:58,532 DEBUG [VRaptor ] VRaptor ended the request

package com.agenda.controller;

import java.util.List;

import br.com.caelum.vraptor.Delete;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Put;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;

import com.agenda.dao.ContatoDAO;
import com.agenda.modelo.Contato;

@Resource
public class ContatosController {
	private final ContatoDAO dao;
	private final Result result;
	
	public ContatosController(ContatoDAO dao, Result result) {
		this.dao = dao;
		this.result = result;
	}
	
	@Post @Path("/contatos")
	public void adiciona(Contato contato) {
		dao.adiciona(contato);
		result.redirectTo(this).lista();
	}

	@Delete @Path("/contatos/{id}")
	public void exclui(String id) {
		Contato contato = dao.carrega(id);
		dao.exclui(contato);
		result.redirectTo(this).lista();
	}
	
	@Put @Path("/contatos/{contato.id}")
	public void atualiza(String id) {
		Contato contato = dao.carrega(id);
		dao.atualiza(contato);
		result.redirectTo(this).lista();
	}
		
	@Get @Path("/contatos")
	public List&lt;Contato&gt; lista() {
		return dao.listaTudo();
	}
	
	@Get @Path("/contatos/novo")
	public void formulario(){}
}