olá pessoal, estou recebendo esse erro:
set 17, 2017 5:08:49 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [dispatcher] in context with path [/casadocodigo] threw exception [An exception occurred processing JSP page /WEB-INF/views/carrinho/itens.jsp at line 111
108: <img src="http://cdn.shopify.com/s/files/1/0155/7645/products/css-eficiente-featured_large.png?v=1435245145" width="71px" height="100px" />
109: </td>
110: <td class="item-title">${item.produto.titulo}</td>
111: <td class="numeric-cell">${item.preco}</td>
112: <td class="quantity-input-cell">
113: <input type="number" min="0" readonly="readonly" id="quantidade" name="quantidade" value="${carrinhoCompras.getQuantidade(item) }" />
114: </td>
Stacktrace:] with root cause
java.util.NoSuchElementException: No value present
at java.util.Optional.get(Unknown Source)
at br.com.casadocodigo.loja.models.Produto.precoPara(Produto.java:107)
at br.com.casadocodigo.loja.models.CarrinhoItem.getPreco(CarrinhoItem.java:60)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:99)
at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
at org.apache.el.parser.AstValue.getValue(AstValue.java:184)
Notei o erro a partir da aula 14 ao ter criado a classe PagamentoController e inserido o método finalizar, na sequência, foi necessário o proxyMode=ScopedProxyMode.TARGET_CLASS na classe CarrinhoCompras Segue minha classe CarrinhoCompras:
package br.com.casadocodigo.loja.models;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Component;
import org.springframework.web.context.WebApplicationContext;
@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION, proxyMode=ScopedProxyMode.TARGET_CLASS)
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);
}
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);
}
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));
}
}
E meu jsp itens: https://gist.github.com/anonymous/0174cfff3ba921671c5055d5508455a3
O erro ocorre bem nesta linha
<td class="numeric-cell">${item.preco}</td>
Notei que meu construtor do CarrinhoItem recebe corretamente o Produto porem o TipoPreco vem NULL https://gist.github.com/anonymous/ecbb3f3d121fe64e02c38f02a6b3cd19