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

Erro ao renderizar página

Pessoal, boa dia.

Estou seguindo as aulas do curso de hibernate, porém quando tento acessar umas das páginas eu tenho o erro abaixo:

org.apache.jasper.el.JspPropertyNotFoundException: /WEB-INF/views/produto/form.jsp(64,6) '${produto.categorias}' Property [categorias] not found on type [br.com.caelum.model.Produto]
    org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:120)
    org.apache.jsp.WEB_002dINF.views.produto.form_jsp._jspx_meth_c_005fforEach_005f2(form_jsp.java:692)
    org.apache.jsp.WEB_002dINF.views.produto.form_jsp._jspx_meth_c_005fforEach_005f1(form_jsp.java:624)
    org.apache.jsp.WEB_002dINF.views.produto.form_jsp._jspService(form_jsp.java:321)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443)
    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:742)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1244)
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1027)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:971)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

No entando essa propriedade que ele está reclamando ela existe no meu modelo.

Grato

6 respostas

Antonio, poste o código da sua pagina JSP e do seu model Produto.

Luis segue o código


package br.com.caelum.model;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.validation.Valid;
import javax.validation.constraints.Min;

import org.hibernate.validator.constraints.NotEmpty;

@Entity
public class Produto {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @NotEmpty
    private String nome;
    @NotEmpty
    private String linkDaFoto;

    @NotEmpty
    @Column(columnDefinition="TEXT")
    private String descricao;

    @Min(20)
    private double preco;


    @Valid
    @ManyToOne
    private Loja loja;

    @ManyToMany
    private List<Categoria> categorias = new ArrayList<>();

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    //método auxiliar para associar categorias com o produto
    //se funcionar apos ter definido o relacionamento entre produto e categoria
//    public void adicionarCategorias(Categoria... categorias) {
//        for (Categoria categoria : categorias) {
//            this.categorias.add(categoria);
//        }
//    }

    public String getLinkDaFoto() {
        return linkDaFoto;
    }

    public double getPreco() {
        return preco;
    }

    public void setPreco(double preco) {
        this.preco = preco;
    }

    public void setLinkDaFoto(String linkDaFoto) {
        this.linkDaFoto = linkDaFoto;
    }

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

    public Integer getId() {
        return id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setLoja(Loja loja) {
        this.loja = loja;
    }

    public Loja getLoja() {
        return loja;
    }

}



<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>


<c:import url="../template/top.jsp" />
<div class="container">
    <div class="panel panel-default">
        <div class="panel-heading">Novo produto</div>

        <div class="panel-body">
            <form action="${spring:mvcUrl('cadastraProduto').build()}" method="post">
                <div class="form-group">
                    <label for="nome">
                        Nome:
                    </label>
                    <input type="text" class="form-control" name="nome" value="${produto.nome}">
                    <form:errors path="produto.nome" />
                </div>

                <div class="form-group">
                    <label for="nome">
                        Link da foto:
                    </label>
                    <input type="text" class="form-control" name="linkDaFoto" value="${produto.linkDaFoto}">
                    <form:errors path="produto.linkDaFoto" />
                </div>
                <div class="form-group">
                    <label for="nome">
                        Preço:
                    </label>
                    <input type="text" class="form-control" name="preco" value="${produto.preco}">
                    <form:errors path="produto.preco" />
                </div>
                <div class="form-group">
                    <label for="nome">
                        Loja:
                    </label>
                    <select name="loja.id" class="form-control">
                        <option value="selecione">Selecione</option>
                        <c:forEach items="${lojas}" var="loja">
                            <c:choose>
                                <c:when test="${produto.loja.id == loja.id }">
                                    <option value="${loja.id}" selected>${loja.nome}</option>    
                                </c:when>
                                <c:when test="${produto.loja.id != loja.id }">
                                    <option value="${loja.id}">${loja.nome}</option>    
                                </c:when>
                            </c:choose>
                        </c:forEach>
                    </select>
                    <form:errors path="produto.loja.id" />
                </div>
                <div class="form-group">
                    <label for="descricao">
                        Categoria:
                    </label><br>
                    <c:forEach items="${categorias}" var="categoria" varStatus="status">
                        <c:set var="contains" value="false"/>

                        <c:forEach items="${produto.categorias}" var="categoriaProduto" varStatus="statusProduto">
                            <c:if test="${categoriaProduto.id == categoria.id}">
                                <c:set var="contains" value="true"/>        
                            </c:if>
                        </c:forEach>    
                        <c:choose>    
                            <c:when test="${contains}">
                                 <input type="checkbox" name="categorias" value="${categorias[status.index].id}" checked> 
                                    ${categoria.nome}<br>
                                <c:set var="contains" value="false"/>        
                            </c:when>
                            <c:when test="${not contains }">
                                <input type="checkbox" name="categorias" value="${categorias[status.index].id}"> 
                                    ${categoria.nome}<br>
                            </c:when>
                        </c:choose>
                    </c:forEach>
                </div>
                <div class="form-group">
                    <label for="descricao">
                        Descrição:
                    </label>
                    <textarea name="descricao" class="form-control">${produto.descricao}</textarea>
                </div>
                <form:errors path="produto.descricao" />

                <c:if test="${produto.id != null}">
                    <div class="form-group">
                        <input type="submit" class="btn btn-success" value="Atualizar">
                        <input type="hidden" name="id" value="${produto.id}">
                    </div>
                </c:if>

                <c:if test="${produto.id == null}">
                    <div class="form-group">
                        <input type="submit" class="btn btn-success" value="Cadastrar">
                    </div>
                </c:if>

             </form>
        </div>
    </div>
</div>


</body>
</html>

Antonio,

O motivo pode ser porque a sua classe model "Produto" não tem um método publico get para o atributo "categorias".

Tenta criar esse método e veja se resolve:

public List<Categoria> getCategorias(){
    return this.categorias;
}

Luis, criei o método porém o erro continua acontecendo.

solução!

Rapaz, muito estranho.

Tenta limpar o seu projeto, limpar o servidor tomcat e reimplantar sua aplicação.

A exception de JspPropertyNotFoundException é quando o o controlador não consegue encontrar o recurso, no caso, a propriedade Categoria.

Luis, boa noite.

Funcionou, fiz os passos que vc falou e agora consigo acessar as páginas normalmente.

Obrigado pela ajuda.