4
respostas

Erro ao adicionar item ao carrinho

Consigo listar todos os livros, mas ao adicionar um item ao carrinho, uma excessão é levantada no arquivo itens.jsp. Pelo que entendi, o método getQuantidade não está presente na classe CarrinhoCompras, mas no código, o método está incluso. Segue o log do erro:

org.apache.jasper.JasperException: An exception occurred processing [/WEB-INF/views/carrinho/itens.jsp] at line [117]

114:                         <td class="numeric-cell">${item.tipoPreco}</td>
115:                         <td class="quantity-input-cell"><input type="number" min="0"
116:                             id="quantidade" name="quantidade"
117:                             value="${carrinhoCompras.getQuantidade(item)}" /></td>
118:                         <td class="numeric-cell">${carrinhoCompras.getTotal(item)}</td>
119:                         <td class="remove-item">
120:                             <form action="" method="POST">


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:617)

... Depois vem:

Root Cause

javax.el.MethodNotFoundException: Method not found: class br.com.casadocodigo.loja.models.CarrinhoCompras.getQuantidade(br.com.casadocodigo.loja.models.CarrinhoItem)
    javax.el.Util.findWrapper(Util.java:373)
    javax.el.Util.findMethod(Util.java:219)
    javax.el.BeanELResolver.invoke(BeanELResolver.java:149)
    org.apache.jasper.el.JasperELResolver.invoke(JasperELResolver.java:147)
...

Na classe CarrinhoCompras, tem dois métidos getQuantidade. Seguem eles:

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);
}

Alguém pode me explicar como eu resolvo este problema?

4 respostas

esse método tem que ser public:

private int getQuantidade(CarrinhoItem item) {

Obrigada! O erro anterior resolveu. Mas deu outro erro que eu tb não soube resolver. Alguém poderia me ajudar?

Segue o logo de erro:

org.apache.jasper.JasperException: An exception occurred processing [/WEB-INF/views/carrinho/itens.jsp] at line [118]

115:                         <td class="quantity-input-cell"><input type="number" min="0"
116:                             id="quantidade" name="quantidade"
117:                             value="${carrinhoCompras.getQuantidade(item)}" /></td>
118:                         <td class="numeric-cell">${carrinhoCompras.getTotal(item)}</td>
119:                         <td class="remove-item">
120:                             <form action="" method="POST">
121:                                 <form


****Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:617)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:514)

****Root Cause

javax.el.ELException: java.util.NoSuchElementException: No value present
    javax.el.BeanELResolver.invoke(BeanELResolver.java:164)

org.apache.jasper.el.JasperELResolver.invoke(JasperELResolver.java:147)
    org.apache.el.parser.AstValue.getValue(AstValue.java:159)
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:190)

****Root Cause

java.util.NoSuchElementException: No value present
    java.util.Optional.get(Unknown Source)
    br.com.casadocodigo.loja.models.Produto.precoPara(Produto.java:89)
    br.com.casadocodigo.loja.models.CarrinhoItem.getPreco(CarrinhoItem.java:41)
    br.com.casadocodigo.loja.models.CarrinhoItem.getTotal(CarrinhoItem.java:45)
    br.com.casadocodigo.loja.models.CarrinhoCompras.getTotal(CarrinhoCompras.java:52)
    br.com.casadocodigo.loja.models.CarrinhoCompras$$FastClassBySpringCGLIB$$40fb54e8.invoke(<generated>)
    org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)

carrinhoCompras.getTotal(item) está retornando null, o problema está na implementação do getTotal, posta o código por favor

Segue a classe CarrinhoCompras completa: public class CarrinhoCompras implements Serializable {

private static final long serialVersionUID = 1L;


private Map<CarrinhoItem, Integer> itens = new LinkedHashMap<CarrinhoItem, Integer>();

 public Collection<CarrinhoItem> getItens() {
        return itens.keySet();
  }

public void add(CarrinhoItem item) {
    itens.put(item, getQuantidade(item) + 1);        
}

public 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);
}

public BigDecimal getTotal(CarrinhoItem item) {
    return item.getTotal(getQuantidade(item));
}

public BigDecimal getTotal() {
    BigDecimal total = BigDecimal.ZERO;

    for (CarrinhoItem item : itens.keySet()) {
        total = total.add(getTotal(item));
    }

    return total ;
}

public void remover(Integer produtoId, TipoPreco tipoPreco) {
    Produto produto = new Produto();
    produto.setId(produtoId);
    itens.remove(new CarrinhoItem(produto, tipoPreco));
}

}