Mesmo fazendo o que foi feito na aula ainda sim os dados das janelas diferentes do chrome continuam atualizando nas duas.
CONTROLLER
package br.com.casadocodigo.loja.controllers;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.servlet.ModelAndView;
import br.com.casadocodigo.loja.daos.ProdutoDAO; import br.com.casadocodigo.loja.models.CarrinhoCompras; import br.com.casadocodigo.loja.models.CarrinhoItem; import br.com.casadocodigo.loja.models.Produto; import br.com.casadocodigo.loja.models.TipoPreco;
@Controller @RequestMapping("/carrinho") @Scope(value=WebApplicationContext.SCOPE_REQUEST) public class CarrinhoComprasController {
@Autowired
private ProdutoDAO produtoDAO;
@Autowired
private CarrinhoCompras carrinho;
@RequestMapping("/add")
public ModelAndView add(Integer produtoId, TipoPreco tipoPreco) {
ModelAndView modelAndView = new ModelAndView("redirect:/produtos");
CarrinhoItem carrinhoItem = criaItem(produtoId, tipoPreco);
carrinho.add(carrinhoItem);
return modelAndView;
}
private CarrinhoItem criaItem(Integer produtoId, TipoPreco tipoPreco) {
Produto produto = produtoDAO.find(produtoId);
CarrinhoItem carrinhoItem = new CarrinhoItem(produto, tipoPreco);
return carrinhoItem;
}
}
CARRINHO
package br.com.casadocodigo.loja.models;
import java.util.LinkedHashMap; import java.util.Map;
import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import org.springframework.web.context.WebApplicationContext;
@Component @Scope(value=WebApplicationContext.SCOPE_SESSION) public class CarrinhoCompras {
private Map<CarrinhoItem, Integer> itens = new LinkedHashMap<CarrinhoItem, Integer>();
public void add(CarrinhoItem item) {
itens.put(item, getQuantidade(item) + 1);
}
private int getQuantidade(CarrinhoItem item) {
if (!itens.containsKey(item)) {
itens.put(item, 0);
}
return itens.get(item);
}
public int getQuantidade() {
return itens.values().stream().reduce(0, (proximo, acumulador)-> proximo + acumulador);
}
}