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

HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalArgumentException: node to traverse cannot be null!

Pessoal, deu erro 500 quando tentei mostrar a lista. Poderiam me ajudar?

HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalArgumentException: node to traverse cannot be null!

URL http://localhost:8080/casadocodigo/produtos

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
@RequestMapping("/produtos")
public class ProdutosController {

    @Autowired
    private ProdutoDAO produtoDao;

    @RequestMapping("/form")
    public ModelAndView form() {
        ModelAndView modelAndView = new ModelAndView("produtos/form");
        modelAndView.addObject("tipos", TipoPreco.values());
        return modelAndView;

    }

    @RequestMapping(method = RequestMethod.POST)
    public String gravar(Produto produto) {
        System.out.println(produto);
        produtoDao.gravar(produto);
        return "/produtos/ok";
    }

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView listar() {
        List<Produto> produtos = this.produtoDao.listar();
        ModelAndView modelAndView = new ModelAndView("produtos/lista");
        modelAndView.addObject("produtos", produtos);

        return modelAndView;
    }
}
6 respostas

estava com erro na query. Fiz a correção O erro 500 parou mas agora so pega o cabeçalho. Os produtos nao estao sendo impressos. Poderiam me ajudar?

    public List<Produto> listar() {
        return manager.createQuery("SELECT p FROM Produto p", Produto.class).getResultList();
    }

Fala ai Leandro, como está sua view?

Fala Matheus, veja o código.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- Import da taglib -->
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Livros de Java, Android, iPhone, Ruby, PHP e muito mais -
    Casa do Código</title>
</head>
<body>
    <h1>LISTA DE PRODUTOS</h1>
    <table>
        <tr>
            <td>Titulo</td>
            <td>Descrição</td>
            <td>Página</td>
        </tr>

        <c:forEach items="${Produto}" var="produto" >
            <tr>
                <td>${produto.titulo}</td>
                <td>${produto.descricao}</td>
                <td>${produto.pagina}</td>
            </tr>
        </c:forEach>

    </table>
</body>
</html>
solução!

Fala ai Leandro, acredito que o problema esteja no seu c:forEach, para o atributo items você deve passar exatamente o que colocou no seu .addObject no Controller, ou seja:

modelAndView.addObject("produtos", produtos);

Veja que informou a chave de produtos com p minúsculo, e na view está usando maiúsculo e no singular:

<c:forEach items="${Produto}" var="produto" >

Quando na verdade deveria ser:

<c:forEach items="${produtos}" var="produto" >

Espero ter ajudado.

Fala Matheus, obrigado pela resposta. Imaginei que ítems era para ser indicado um tipo, por isso coloquei a classe. Vou testar o novo código só noite dai eu falo se deu certo.

Demoro, fico no aguardo.