Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Não consigo exibir /casadodocodigo/carrinho

Segui os passos demonstrados no vídeo, mas quanto faço a chamada para carrinho dentro CarrinhoComprasControler, recebo o erro abaixo:

javax.el.PropertyNotFoundException: Property 'produto' not found on type java.lang.String

Minhas classes:

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.bind.annotation.RequestMethod;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.servlet.ModelAndView;

import br.com.casadocodigo.loja.dao.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:/carrinho");
        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;
    }

    @RequestMapping(method=RequestMethod.GET)
    public ModelAndView itens(){
        return new ModelAndView("carrinho/itens");
    }


}
package br.com.casadocodigo.loja.models;

import java.math.BigDecimal;

public class CarrinhoItem {

    private Produto produto;
    private TipoPreco tipoPreco;

    public CarrinhoItem(Produto produto, TipoPreco tipoPreco) {
        this.produto = produto;
        this.tipoPreco = tipoPreco;
    }

    public Produto getProduto() {
        return produto;
    }

    public void setProduto(Produto produto) {
        this.produto = produto;
    }

    public TipoPreco getTipoPreco() {
        return tipoPreco;
    }

    public void setTipoPreco(TipoPreco tipoPreco) {
        this.tipoPreco = tipoPreco;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((produto == null) ? 0 : produto.hashCode());
        result = prime * result
                + ((tipoPreco == null) ? 0 : tipoPreco.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        CarrinhoItem other = (CarrinhoItem) obj;
        if (produto == null) {
            if (other.produto != null)
                return false;
        } else if (!produto.equals(other.produto))
            return false;
        if (tipoPreco != other.tipoPreco)
            return false;
        return true;
    }



    public BigDecimal getPreco(){
        return produto.precoPara(tipoPreco);
    }

    public BigDecimal getTotal(int quantidade) {
        return this.getPreco().multiply(new BigDecimal(quantidade));
    }



}
package br.com.casadocodigo.loja.models;

import java.math.BigDecimal;
import java.util.Calendar;
import java.util.List;

import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.springframework.format.annotation.DateTimeFormat;

@Entity
public class Produto {

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id; 
    private String titulo;
    private String descricao; 
    private int paginas;
    private String sumarioPath;

    @ElementCollection
    private List<Preco> precos;
    @DateTimeFormat(pattern="dd/MM/yyyy")
    private Calendar dataLancamento;



    public Calendar getDataLancamento() {
        return dataLancamento;
    }


    public void setDataLancamento(Calendar dataLancamento) {
        this.dataLancamento = dataLancamento;
    }
    public List<Preco> getPrecos() {
        return precos;
    }


    public void setPrecos(List<Preco> precos) {
        this.precos = precos;
    }


    @Override
    public String toString() {
        return "Produto [titulo=" + titulo + ", descricao=" + descricao
                + ", paginas=" + paginas + "]";
    }


    public String getTitulo() {
        return titulo;
    }
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }
    public String getDescricao() {
        return descricao;
    }
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
    public int getPaginas() {
        return paginas;
    }
    public void setPaginas(int paginas) {
        this.paginas = paginas;
    }


    public String getSumarioPath() {
        return sumarioPath;
    }


    public void setSumarioPath(String sumarioPath) {
        this.sumarioPath = sumarioPath;
    }


    public int getId() {
        return id;
    }


    public void setId(int id) {
        this.id = id;
    }


    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + id;
        return result;
    }


    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Produto other = (Produto) obj;
        if (id != other.id)
            return false;
        return true;
    }


    public BigDecimal precoPara(TipoPreco tipoPreco) {
        for (Preco preco : precos) {
            if(preco.getTipo().equals(tipoPreco)){
                return preco.getValor();
            }
        }
        return null;
    }





}

E o trecho dentro da JSP:

<c:forEach items="{carrinhoCompras.itens}" var="item">
                    <tr>
                        <td class="cart-img-col"><img
                            src="http://cdn.shopify.com/s/files/1/0155/7645/products/css-eficiente-featured_large.png?v=1435245145"
                            width="71px" height="100px" /></td>
                        <td class="item-title">${item.produto.titulo }</td>
1 resposta
solução!

Encontrei o problema! Ou melhor os problemas.

Na jsp itens eu me esquecido $ na hora de fazer for

<c:forEach items="{carrinhoCompras.itens}" var="item">

ficou assim:

<c:forEach items="${carrinhoCompras.itens}" var="item">

O outro problema é que eu tinha criado o método para pegar os itens como getItem e não getItens como está sendo chamado no jsp.

Troquei na jsp ficando assim:

<c:forEach items="${carrinhoCompras.item}"