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

Ajuda: Aula 13....

Pessoal, estou com um problema e não consegui até o momento identificar a solução.

Na aula 13, depois de acompanhar os passos e implementar as soluções propostas eu acesso a lista de livros e entro na página de detalhes. Escolho um tipo de preço e na hora de acessar a página itens.jsp é gerado o seguinte erro.

21:17:51,936 ERROR [io.undertow.request] (default task-18) UT005023: Exception handling request to /casacodigo/WEB-INF/views/carrinho/itens.jsp: org.apache.jasper.JasperException: javax.el.ELException: java.lang.NullPointerException
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:473)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:402)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:346)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
    at io.undertow.jsp.JspFileHandler.handleRequest(JspFileHandler.java:32)
    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:274)
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchToPath(ServletInitialHandler.java:209)
    at io.undertow.servlet.spec.RequestDispatcherImpl.forwardImpl(RequestDispatcherImpl.java:221)
    at io.undertow.servlet.spec.RequestDispatcherImpl.forwardImplSetup(RequestDispatcherImpl.java:147)
    at io.undertow.servlet.spec.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:111)
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:172)
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1228)
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
    at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
    at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
    at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
    at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
    at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
    at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
    at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: javax.el.ELException: java.lang.NullPointerException
    at javax.el.ELUtil.invokeMethod(ELUtil.java:304)
    at javax.el.BeanELResolver.invoke(BeanELResolver.java:415)
    at org.apache.jasper.el.JasperELResolver.invoke(JasperELResolver.java:147)
    at com.sun.el.parser.AstValue.getValue(AstValue.java:135)
    at com.sun.el.parser.AstValue.getValue(AstValue.java:203)
    at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:226)
    at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:917)
    at org.apache.jsp.WEB_002dINF.views.carrinho.itens_jsp._jspx_meth_c_005fforEach_005f0(itens_jsp.java:423)
    at org.apache.jsp.WEB_002dINF.views.carrinho.itens_jsp._jspService(itens_jsp.java:236)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
    ... 64 more
Caused by: java.lang.NullPointerException
    at br.com.casacodigo.loja.model.CarrinhoItem.getTotal(CarrinhoItem.java:35)
    at br.com.casacodigo.loja.model.CarrinhoCompras.getTotal(CarrinhoCompras.java:42)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at javax.el.ELUtil.invokeMethod(ELUtil.java:300)
    ... 75 more

Já refiz todos os passo....

Segue as minhas classes

Produto

package br.com.casacodigo.loja.model;

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 Long id;
    private String titulo;
    private String descricao;
    private int paginas;

    @ElementCollection
    private List<Preco> precos;

    @DateTimeFormat
    private Calendar dataLancamento;

    private String sumarioPath;

    public Long getId() {
        return id;
    }

    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 List<Preco> getPrecos() {
        return precos;
    }

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

    public Calendar getDataLancamento() {
        return this.dataLancamento;
    }

    public void setDataLancamento(Calendar dataLancamento) {
        this.dataLancamento = dataLancamento;
    }

    public String getSumarioPath() {
        return sumarioPath;
    }

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

    public BigDecimal precoPara(TipoPreco tipoPreco) {
        return precos.stream().filter(preco -> preco.getTipo().equals(tipoPreco)).findFirst().get().getPreco();
    }

    @Override
    public String toString() {
        return "Produto [título = " + titulo + ", descrição = " + descricao + ", páginas = " + paginas + "]";
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.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;
        Produto other = (Produto) obj;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        return true;
    }

}

CarrinhoComprasController

package br.com.casacodigo.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.casacodigo.loja.dao.ProdutoDAO;
import br.com.casacodigo.loja.model.CarrinhoCompras;
import br.com.casacodigo.loja.model.CarrinhoItem;
import br.com.casacodigo.loja.model.Produto;
import br.com.casacodigo.loja.model.TipoPreco;

@Controller
@RequestMapping("/carrinho")
@Scope(value=WebApplicationContext.SCOPE_REQUEST)
public class CarrinhoComprasController {

    @Autowired
    ProdutoDAO produtoDAO;

    @Autowired
    CarrinhoCompras carrinho;

    @RequestMapping("/add")
    public ModelAndView add(Long produtoId, TipoPreco tipo){
        ModelAndView modelAndView = new ModelAndView("redirect:/carrinho");
        CarrinhoItem carinhoItem = criaItem(produtoId, tipo);
        carrinho.add(carinhoItem);
        return modelAndView;
    }

    private CarrinhoItem criaItem(Long produtoId, TipoPreco tipo){
        Produto produto = produtoDAO.find(produtoId);
        CarrinhoItem carrinhoItem = new CarrinhoItem(produto, tipo);
        return carrinhoItem;
    }

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

CarrinhoItem

package br.com.casacodigo.loja.model;

import java.math.BigDecimal;

public class CarrinhoItem {
    private TipoPreco tipoPreco;
    private Produto produto;

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

    public TipoPreco getTipoPreco() {
        return tipoPreco;
    }

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

    public Produto getProduto() {
        return produto;
    }

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

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

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


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


}

CarrinhoCompras

package br.com.casacodigo.loja.model;

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.stereotype.Component;
import org.springframework.web.context.WebApplicationContext;

@Component
@Scope(value = WebApplicationContext.SCOPE_SESSION)
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 Integer 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;
    }
}

Itens.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<c:url value="/" var="contextPath" />
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport"
    content="width=device-width, initial-scale=1, maximum-scale=1" />
<link rel="icon"
    href="//cdn.shopify.com/s/files/1/0155/7645/t/177/assets/favicon.ico?11981592617154272979"
    type="image/ico" />
<link href="https://plus.googlecom/108540024862647200608"
    rel="publisher" />
<title>Livros de Java, SOA, Android, iPhone, Ruby on Rails e
    muito mais - Casa do Código</title>
<link href="${contextPath}resources/css/cssbase-min.css"
    rel="stylesheet" type="text/css" media="all" />
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700'
    rel='stylesheet' />
<link href="${contextPath}resources/css/fonts.css" rel="stylesheet"
    type="text/css" media="all" />
<link href="${contextPath}resources/css/fontello-ie7.css"
    rel="stylesheet" type="text/css" media="all" />
<link href="${contextPath}resources/css/fontello-embedded.css"
    rel="stylesheet" type="text/css" media="all" />
<link href="${contextPath}resources/css/fontello.css" rel="stylesheet"
    type="text/css" media="all" />
<link href="${contextPath}resources/css/style.css" rel="stylesheet"
    type="text/css" media="all" />
<link href="${contextPath}resources/css/layout-colors.css"
    rel="stylesheet" type="text/css" media="all" />
<link href="${contextPath}resources/css/responsive-style.css"
    rel="stylesheet" type="text/css" media="all" />
<link href="${contextPath}resources/css/guia-do-programador-style.css"
    rel="stylesheet" type="text/css" media="all" />
<link href="${contextPath}resources/css/produtos.css" rel="stylesheet"
    type="text/css" media="all" />
<link rel="canonical" href="http://www.casadocodigo.com.br/" />
</head>
<body>

    <header id="layout-header">
        <div class="clearfix container">
            <a href="/" id="logo"> </a>
            <div id="header-content">
                <nav id="main-nav">

                    <ul class="clearfix">
                        <li><a href="${s:mvcUrl('CCC#itens').build()}" rel="nofollow">Carrinho
                                (${carrinhoCompras.quantidade})</a></li>

                        <li><a href="/pages/sobre-a-casa-do-codigo" rel="nofollow">Sobre
                                Nós</a></li>

                        <li><a href="/pages/perguntas-frequentes" rel="nofollow">Perguntas
                                Frequentes</a></li>
                    </ul>
                </nav>
            </div>
        </div>
    </header>
    <nav class="categories-nav">
        <ul class="container">
            <li class="category"><a href="http://www.casadocodigo.com.br">Home</a></li>
            <li class="category"><a href="/collections/livros-de-agile">
                    Agile </a></li>
            <li class="category"><a href="/collections/livros-de-front-end">
                    Front End </a></li>
            <li class="category"><a href="/collections/livros-de-games">
                    Games </a></li>
            <li class="category"><a href="/collections/livros-de-java">
                    Java </a></li>
            <li class="category"><a href="/collections/livros-de-mobile">
                    Mobile </a></li>
            <li class="category"><a
                href="/collections/livros-desenvolvimento-web"> Web </a></li>
            <li class="category"><a href="/collections/outros"> Outros </a></li>
        </ul>
    </nav>

    <section class="container middle">
        <h2 id="cart-title">Seu carrinho de compras</h2>


        <table id="cart-table">
            <colgroup>
                <col class="item-col" />
                <col class="item-price-col" />
                <col class="item-quantity-col" />
                <col class="line-price-col" />
                <col class="delete-col" />
            </colgroup>
            <thead>
                <tr>
                    <th class="cart-img-col"></th>
                    <th width="65%">Item</th>
                    <th width="10%">Preço</th>
                    <th width="10%">Quantidade</th>
                    <th width="10%">Total</th>
                    <th width="5%"></th>
                </tr>
            </thead>
            <tbody>
                <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>
                        <td class="numeric-cell">${item.preco}</td>
                        <td class="quantity-input-cell"><input type="number" min="0"
                            readonly="readonly" id="quantidade" name="quantidade"
                            value="${carrinhoCompras.getQuantidade(item) }" /></td>
                        <td class="numeric-cell">${carrinhoCompras.getTotal(item)}</td>
                        <td>
                            <form action="" method="post">
                                <input type="image" src="/excluir.png" alt="Excluir"
                                    title="Excluir" />
                            </form>
                        </td>
                    </tr>
                </c:forEach>
            </tbody>
            <tfoot>
                <tr>
                    <td colspan="3"><input type="submit" class="checkout"
                        name="checkout" value="Finalizar compra" /></td>
                    <td class="numeric-cell">${carrinhoCompras.total}</td>
                    <td></td>
                </tr>
            </tfoot>
        </table>

        <h2>Você já conhece os outros livros da Casa do Código?</h2>
        <ul id="collection" class="related-books">
            <li class="col-left"><a href="/products/livro-plsql"
                class="block clearfix book-suggest"
                data-book="PL/SQL: Domine a linguagem do banco de dados Oracle">
                    <img width="113px" height="160px"
                    src="http:////cdn.shopify.com/s/files/1/0155/7645/products/plsql-featured_compact.png?v=1434740236"
                    alt="PL/SQL: Domine a linguagem do banco de dados Oracle" />
            </a></li>
        </ul>

        <h2>
            <a href="http://www.casadocodigo.com.br">Veja todos os livros que
                publicamos!</a>
        </h2>
    </section>



    <footer id="layout-footer">
        <div class="clearfix container">




            <div id="collections-footer">
                <!-- cdc-footer -->
                <p class="footer-title">Coleções de Programação</p>
                <ul class="footer-text-links">
                    <li><a href="/collections/livros-de-java">Java</a></li>
                    <li><a href="/collections/livros-desenvolvimento-web">Desenvolvimento
                            Web</a></li>
                    <li><a href="/collections/livros-de-mobile">Mobile</a></li>
                    <li><a href="/collections/games">Games</a></li>
                    <li><a href="/collections/livros-de-front-end">Front End</a></li>
                </ul>
                <p class="footer-title">Outros Assuntos</p>
                <ul class="footer-text-links">
                    <li><a href="/collections/livros-de-agile">Agile</a></li>
                    <li><a href="/collections/outros">e outros...</a></li>
                </ul>
            </div>
            <div id="social-footer">
                <!-- books-footer -->
                <p class="footer-title">Links da Casa do Código</p>
                <ul class="footer-text-links">
                    <li><a href="http://livros.casadocodigo.com.br" rel="nofollow">Meus
                            E-books</a></li>
                    <li><a href="/pages/sobre-a-casa-do-codigo">Sobre a Casa
                            do Código</a></li>
                    <li><a href="/pages/perguntas-frequentes">Perguntas
                            Frequentes</a></li>
                    <li><a href="https://www.caelum.com.br">Caelum - Ensino e
                            Inovação</a></li>
                    <li><a href="http://www.codecrushing.com/" rel="nofollow">Code
                            Crushing</a></li>
                    <li><a
                        href="http://www.casadocodigo.com.br/pages/politica-de-privacidade"
                        rel="nofollow">Política de Privacidade</a></li>
                </ul>
                <p class="footer-title">Redes Sociais</p>
                <ul>
                    <li class="social-links"><a
                        href="http://www.twitter.com/casadocodigo" target="_blank"
                        id="twitter" rel="nofollow">Facebook</a> <a
                        href="http://www.facebook.com/casadocodigo" target="_blank"
                        id="facebook" rel="nofollow">Twitter</a></li>
                </ul>
            </div>
            <div id="newsletter-footer">
                <!-- social-footer -->
                <p class="footer-title">Receba as Novidades e Lançamentos</p>
                <div id="form-newsletter">
                    <form action="" method="POST" id="ss-form" class="form-newsletter">
                        <ul>
                            <li><input type="hidden" name="pageNumber" value="0" /><input
                                type="hidden" name="backupCache" value="" /><input type="email"
                                name="entry.0.single" value="" class="ss-q-short" id="entry_0"
                                placeholder="seu@email.com" /></li>
                            <li><input type="submit" name="submit"
                                value="Quero Receber!" id="submit-newsletter" /></li>
                        </ul>
                    </form>
                    <ul>
                        <li class="ie8"><a href="" rel="nofollow">Receba as
                                Novidades e Lançamentos</a></li>
                    </ul>
                </div>
                <ul class="footer-payments">
                    <li></li>
                    <li></li>
                </ul>
            </div>
        </div>
    </footer>
</body>
</html>
3 respostas
solução!

Bom dia, Hugo! Tudo bem com você? =)

Na primeira linha da sua Stack Trace, podemos ver que um NullPointerException foi lançado, dentro de uma Expression Language, no arquivo itens.jsp.

Em várias partes você está fazendo ${carrinhoCompras.quantidade}, ${carrinhoCompras.total}, etc... Acho que esse objeto carrinhoCompras está nulo!

Qual página/url você tentou acessar para causar esse erro?

Fábio

Fala aí Hugo, tudo bem?

Cara olhando a stacktrace o que eu percebi é que no momento em que a Itens jsp invoca o método getTotal() do objeto CarrinhoItem está rolando uma NullPointerException.

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

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

Essa NPE pode estar acontecendo porquê o produto está nulo ou porquê o tipoPreco está nulo ou porquê o retorno do método precoPara está retornando nulo.

Verifique se o Produto e TipoPreco está chegando correto, e se o retorno da invocação do método precoPara está retornando um objeto válido ao invés de nulo.

Espero ter ajudado!

Obrigado pessoal!

Com a dica de vocês consegui identificar que o método getTotal da classe CarrinhoItem não está recebendo os valores...

Valeu mesmo!!!!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software