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):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();
}
}
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;
}
}
<%@ 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"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h3>Itens do seu carrinho de compras</h3>
<table>
<thead>
<tr>
<th>Cod Produto</th>
<th>Descrição</th>
<!-- <th>Preço</th> -->
<th>Qtde</th>
<!-- <th>Total</th> -->
</tr>
</thead>
<tbody>
<c:forEach items="${carrinho.itens}" var="item">
<tr>
<td><img src="${item.produto.url_imagem }" /></td>
<td>${item.produto.cod_produto }</td>
<td>${item.produto.descricao_produto }</td>
<!-- <td><fmt:formatNumber type="currency" value="${item.produto.valor}" /></td> -->
<td>${item.quantidade }</td>
<!-- <td><fmt:formatNumber type="currency" value="${item.quantidade * item.produto.valor}" /></td> -->
</tr>
<form action="remove" method="POST">
<button name="_method" value="DELETE">Remover</button>
</form>
<form action="comprar" method="POST">
<button name="" value="DELETE">Comprar</button>
</form>
</c:forEach>
</tbody>
<tfoot>
<tr>
<td colspan="2"></td>
<!-- <th colspan="2">Total:</th> -->
<!-- <th><fmt:formatNumber type="currency" value="${carrinho.total}" /></th> -->
</tr>
</tfoot>
</table>
</body>
</html>
package br.bmweb.controller;
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();
}
}
usuarioWeb.getLogado().getLogin()
@SessionScoped
<c:if test="${usuarioWeb.logado && usuarioWeb.administrador}">