3
respostas

The JSP specification requires that an attribute name is preceded by whitespace

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;
    }
}
3 respostas

Resolvi, mas não tenho certeza do que era por que mexi em varias coisas mas aparentemente foi aqui

core"prefix

essa é a terceira linha do jsp e agora esta assim

core" prefix

Boa tarde Alison, realmente isso faz diferença sim! Porque não cria uma jsp simples com essa diretiva e tenta rodar?

Obrigado Guilherme, eu fiz isso e realmente era ai mesmo, valeuuu.