Olá, preciso de ajuda, eu entendi que o nome de algum atributo precisa ter um espaço em branco, mas já olhei varias vezes e não consigo encontrar onde estou errando, usando o debug eu vi que os produtos são carregados para a lista que criei na classe produtosControllers, mas quando vou passar essa lista para o arquivo lista.jsp da o erro The JSP specification requires that an attribute name is preceded by whitespace, desde já agradeço, segue o codigo:
jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Livro de Java, Android, iPhone, Ruby e muito mais - Casa do Código</title>
</head>
<body>
<h1>Lista de Produtos</h1>
<table>
<tr>
<td>Título</td>
<td>Descrição</td>
<td>Páginas</td>
</tr>
<c:forEach items="${ produtos }" var="produto">
<tr>
<td>${ produto.titulo }</td>
<td>${ produto.descricao }</td>
<td>${ produto.paginas }</td>
</tr>
</c:forEach>
</table>
</body>
</html>
ProdutosControllers
package br.com.casadocodigo.loja.controllers;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import br.com.casadocodigo.loja.daos.ProdutoDAO;
import br.com.casadocodigo.loja.models.Produto;
import br.com.casadocodigo.loja.models.TipoPreco;
@Controller
public class ProdutosControllers {
@Autowired
private ProdutoDAO produtoDAO;
@RequestMapping("/produtos/form")
public ModelAndView form() {
ModelAndView modelAndView = new ModelAndView("produtos/form");
modelAndView.addObject("tipos", TipoPreco.values());
return modelAndView;
}
// gravar é via post
@RequestMapping(value="/produtos", method=RequestMethod.POST)
//repare que o nome dos parametros são exatamente os names que estão no form.jsp
public String gravar(Produto produto) {
System.out.println(produto);
produtoDAO.gravar(produto);
return "produtos/ok";
}
//criando um mapeamento
@RequestMapping(value="/produtos", method=RequestMethod.GET)
public ModelAndView listar() {
List<Produto> produtos = produtoDAO.listar();
//dentro do construtor de modelAndView temos que dizer para que página vamos
//esse produtos/lista é o diretório onde a página esta e o arquivo .jsp
ModelAndView modelAndView = new ModelAndView("produtos/lista");
//mandando os itens para a página, aqui o alias é produtos e a lista é produtos
modelAndView.addObject("produtos",produtos);
System.out.println("\nImprimindo\n");
for(Produto row : produtos) {
System.out.println("\n é para imprimir "+row.getDescricao());
}
return modelAndView;
}
}