[RESOLVIDO] Login no VRaptor, SessionScoped e variável no JSP

5 respostas
Fabio_Kym_Nascimento

Pessoal seguinte, estou fazendo um sisteminha com o VRaptor e não estou conseguindo entender como o VRaptor trabalha com o SessionScoped.

Ao fazer o login, percebo que o usuario permanece logado entre as requisições (SessionScoped), mas não consegui descobrir como o VRaptor inclui a variavel para ser utilizada nos JSPs.

No meu UsersController:

@Get
	@Path("/users/login")
	public void login() { }
	
	@Post
	@Path("/users/validateLogin")
	public void validateLogin(User user) {
		User validUser = this.userDao.login(user);
		if (validUser == null) {
			this.validator.add(new ValidationMessage("Email e/ou senha inválido(s)", "user.login"));
		}
		this.validator.onErrorUse(Results.page()).of(UsersController.class).login();
		this.currentUser.login(validUser);
		result.redirectTo(UsersController.class).users();
	}

Ai beleza, o usuario acessa o form de Login, envia o email/senha, ela é validada no UserDao e adicionada ao UserSession:

@Component
@SessionScoped
public class UserSession {
	
	private User currentUser;
	
	public void login(User user) {
		this.currentUser = user;
	}
	
	public boolean isLogged() {
		return this.currentUser != null;
	}

}

No UsersController eu recebo o UserSession no construtor atras das injeção de dependencia, funciona belezinha:

public UsersController(UserDao dao, Result result, Validator validator, UserSession currentUser) {
		this.result = result;
		this.userDao = dao;
		this.validator = validator;
		this.currentUser = currentUser;
	}

Porém, em qualquer URI de users que eu acesso, no jsp eu não consigo acessar a variavel currentUser a menos que eu inclua ela explicitamente com result.include.

A duvida é, este é o prodecimento desejado? Tenho que ficar adicionando currentUser manualmente em todos os metodos? Não existe uma forma do VRaptor injetar essa variavel pra mim nos JSPs?

5 Respostas

Lagaffe

Fabio,

No final desta página do manual tem um exemplo:

http://vraptor.caelum.com.br/documentacao/migrando-do-vraptor2-para-o-vraptor3/

G

Todo e qualquer objeto que você anota como @RequestScope, @SessionScope e afins o vraptor automaticamente coloca na session e faz a adição no JSP (outjection) conforme o nome da classe em camel-case. Se você tem uma classe MyUser o vraptor exporta a variável como myUser.

No seu caso você encontra como userSession, já que sua classe chama-se UserSession.

Fabio_Kym_Nascimento

Ainda não entendi como o objeto é disponibilizado nos JSPs :confused:

Porque no projeto mydvd que tem de exemplo no site do vraptor e na apostila do FJ28 não tem nada falando sobre isso.

Eu tenho que manipular diretamente o HttpSession?

Fabio_Kym_Nascimento

garcia-jj:
Todo e qualquer objeto que você anota como @RequestScope, @SessionScope e afins o vraptor automaticamente coloca na session e faz a adição no JSP (outjection) conforme o nome da classe em camel-case. Se você tem uma classe MyUser o vraptor exporta a variável como myUser.

No seu caso você encontra como userSession, já que sua classe chama-se UserSession.

Hmm aqui você me deu uma luz, vou tentar aqui, obrigado!

Fabio_Kym_Nascimento

Valeu galera, deu certo agora! Eu estava errando o nome da variavel que é disponibilizada no JSP! To acostumado com Rails heh! No caso a dica do garcia-jj foi perfeita, o nome da variável é o nome da classe e não o nome do atributo!

Criado 28 de janeiro de 2010
Ultima resposta 28 de jan. de 2010
Respostas 5
Participantes 3