Olá, estou desenvolvendo um sistema que possuirá um carrinho de compras, onde para que o usuário possa adicionar itens ao carrinho de compras é necessário que ele esteja logado. O login já implementei e funciona perfeitamente na sessão. O carrinho de compras implementei uma parte onde já é possível adicionar os produtos e listá-los. O carrinho de compras basicamente possuirá uma botão “Comprar” onde a ação irá capturar o código do usuário e irá salvar os dados do produto que está no carrinho de compras na tabela orçamento. Meu problema está em capturar os dados do usuário que está na sessão, mesmo a classe estando com a notação “@SessionEscoped”. Seguem as classes:
UsuarioController (classe usada para efetuar o login, sempre executo o método efetuaLogin):
[code]package br.bmweb.controller;
import java.util.Iterator;
import java.util.List;
import br.bmweb.bean.Usuario;
import br.bmweb.bean.UsuarioWeb;
import br.bmweb.dao.UsuarioDao;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.ValidationMessage;
@Resource
public class UsuarioController {
//private final UsuarioDao dao;
UsuarioDao dao = new UsuarioDao();
private final UsuarioWeb usuarioWeb;
private final Result result;
private final Validator validator;
public UsuarioController(UsuarioDao dao, Result result, Validator validator, UsuarioWeb usuarioWeb) {
//public UsuarioController(Result result, Validator validator, UsuarioWeb usuarioWeb) {
this.dao = dao;
this.result = result;
this.validator = validator;
this.usuarioWeb = usuarioWeb;
}
}
public void efetuaLogin(Usuario usuario) {
List<Usuario> usr = dao.carrega(usuario);
if(usr.size() > 0)
{
Iterator it = usr.iterator();
while(it.hasNext()){
Object[] c = (Object[]) it.next();
usuario.setLogin((String) c[0]);
usuario.setSenha((String) c[1]);
usuario.setGrupo((String) c[2]);
}
}
if (usuario == null) {
validator.add(new ValidationMessage("Login e/ou senha inválidos", ""));
}
//validator.onErrorUse(page()).of(UsuarioController.class).loginForm();
usuarioWeb.login(usuario);
result.redirectTo(ClienteController.class).index2();
}
public void login(){
}
public void logout() {
usuarioWeb.logout();
result.redirectTo(ClienteController.class).index2();
}
}
[/code]
UsuarioWeb (classe usada para armazenar os dados do usuário logado, sempre executo o método login):
[code]package br.bmweb.bean;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.SessionScoped;
@Component
@SessionScoped
public class UsuarioWeb {
private Usuario logado;
private boolean administrador;
public void login(Usuario usuario) {
this.logado = usuario;
if (usuario.getGrupo().equals("Administrador")) {
this.administrador = true;
} else {
this.administrador = false;
}
}
public boolean isLogado() {
return logado != null;
}
public void logout() {
this.logado = null;
}
public Usuario getLogado() {
return logado;
}
public void setLogado(Usuario logado) {
this.logado = logado;
}
public boolean isAdministrador() {
return administrador;
}
public void setAdministrador(boolean administrador) {
this.administrador = administrador;
}
}[/code]
Jsp de listagem dos itens do carrinho de compras onde possui o botão “Comprar” que irá capturar o código do usuário logado no sistema, irá capturar o código do produto que está adicionado ao carrinho de compras.
[code]<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>
<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1”
pageEncoding=“ISO-8859-1”%>
<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt”%>
Itens do seu carrinho de compras
| Cod Produto | Descrição | Qtde | |
|---|---|---|---|
| ${item.produto.cod_produto } | ${item.produto.descricao_produto } | ${item.quantidade } | |
import java.util.List;
import br.bmweb.bean.Carrinho;
import br.bmweb.bean.Item;
import br.bmweb.bean.Produto;
import br.bmweb.bean.Usuario;
import br.bmweb.bean.UsuarioWeb;
import br.bmweb.dao.ProdutoDao;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
@Resource
public class CarrinhoController {
private final Carrinho carrinho;
private final ProdutoDao dao;
private final Result result;
public CarrinhoController(Carrinho carrinho, ProdutoDao dao, Result result) {
this.carrinho = carrinho;
this.dao = dao;
this.result = result;
}
public void visualiza() {
}
public List<Produto> carrinhoTeste(){
return dao.listaTudo();
}
public void adiciona(Item item) {
dao.recarrega(item.getProduto());
carrinho.adiciona(item);
//System.out.println("Itens: Controller: " + carrinho.getItens());
result.redirectTo(CarrinhoController.class).visualiza();
}
public void remove(int indiceItem) {
carrinho.remove(indiceItem);
result.redirectTo(CarrinhoController.class).visualiza();
}
public void comprar(Item item){
UsuarioWeb usuarioWeb = new UsuarioWeb();
Usuario usuario = new Usuario();
System.out.println("Usuario web: " + usuarioWeb.getLogado().getLogin());
System.out.println("Valor usuario: " + usuario.getLogin());
//Operações que pegam o código do usuário logado, o código do produto que está no carrinho de compras...
result.redirectTo(CarrinhoController.class).visualiza();
}
}[/code]
No método “comprar” da classe acima preciso basicamente pegar os dados do usuário logado, notem que fiz usuarioWeb.getLogado().getLogin() mas sempre imprime nulo no console, eu não deveria conseguir acessar os dados do usuário logado (classe UsuarioWeb) sendo que a classe está com a notação @SessionScoped do V-Raptor? O engraçado é que se em qualquer formulário HTML eu fizer <c:if test="${usuarioWeb.logado && usuarioWeb.administrador}"> e tentar acessar o formulário não consigo visualizar a página, ou seja, desta forma sei que o login está funcionando corretamente mas internamente no código Java não consigo enxergar os dados do usuário logado através da classe UsuarioWeb. Alguém tem alguma idéia??