Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro ao inserir livro no carrinho

Olá, boa noite!

Estou recebendo um erro ao inserir um livro no carrinho e não consigo identificar a sua origem. Aparentemente o código está igual ao códigos das aulas. Agradeço se alguém conseguir me ajudar.

HTTP Status 500 – Internal Server Error

Type Exception Report

Message An exception occurred processing [/WEB-INF/views/carrinho/itens.jsp] at line [90]

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

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

87:                             width="71px" height="100px" />
88:                         </td>
89:                         <td class="item-title">${item.produto.titulo }</td>
90:                         <td class="numeric-cell">${item.preco }</td>
91:                         <td class="quantity-input-cell">
92:                                 <input type="number" min="0" id="quantidade" name="quantidade" value="${carrinhoCompras.getQuantidade(item) }" />
93:                         </td>

Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:626)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:515)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:733)

Root Cause

javax.el.ELException: Error reading [preco] on type [br.com.casadocodigo.loja.models.CarrinhoItem]
    javax.el.BeanELResolver.getValue(BeanELResolver.java:98)


Root Cause

java.util.NoSuchElementException: No value present
    java.base/java.util.Optional.get(Optional.java:148)
    br.com.casadocodigo.loja.models.Produto.precoPara(Produto.java:115)
    br.com.casadocodigo.loja.models.CarrinhoItem.getPreco(CarrinhoItem.java:19)
3 respostas

Segue o link para o repositório no GitHub https://github.com/LHCortez/alura-javaEE-springMVC

Opa, o problema está no método precoPara na classe Produto. Você está tentando dar get numa Optional, mas essa Optional está vazia. Para saber exatamente, vai ser necessário uma leve debugada para entender o que está chegando errado.

solução!

Oi Otávio, valeu pela resposta. Acabei identificando que erro tratava-se de um conflito entre um paramêtro do método add do CarrinhoComprasController e a view detalhe.jsp. Ao clicar no botão Comprar da página, vinha o erro.

    @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;
    }
<form:form action='${contextPath }/carrinho/add' method="post" cssClass="container">
                <input type="hidden" value="${produto.id }" name="produtoId">
                <ul id="variants" class="clearfix">
                    <c:forEach items="${produto.precos }" var="preco">
                        <li class="buy-option">
                            <input type="radio" name="tipoPreco" class="variant-radio" id="tipoPreco"
                                value="${preco.tipo }" checked="checked" />
                            <label class="variant-label">${preco.tipo }</label>
                            <small class="compare-at-price">R$ 39,90</small>
                            <p class="variant-price">${preco.valor }</p>
                        </li>
                    </c:forEach>
                </ul>
                <button type="submit" class="submit-image icon-basket-alt"
                    title="Compre Agora ${produto.titulo }"></button>
            </form:form>