Não estou conseguindo chamar a página lista.jsp passando a diferenciação para o Mapping só com o paramento method = RequestMethod.GET. Fiz um teste com a anotação @RequestMapping("/produtos/lista") e funcionou. Além desse teste verifique o method = RequestMethod.POST e funcionou perfeitamente. No log de erro consta:
WARN [org.springframework.web.servlet.PageNotFound] (default task-4) No mapping found for HTTP request with URI [/casacodigo/produtos/lista] in DispatcherServlet with name 'dispatcher'
Segue a classe ProdutoController
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.casacodigo.loja.dao.ProdutoDAO;
import br.com.casacodigo.loja.model.Produto;
import br.com.casacodigo.loja.model.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 " + produto.getTitulo() + " gravado com sucesso!");
produtoDAO.gravar(produto);
return "/produtos/ok";
}
@RequestMapping(method = RequestMethod.GET)
public ModelAndView listar() {
List<Produto> produtos = produtoDAO.listar();
ModelAndView modelAndView = new ModelAndView("/produtos/lista");
modelAndView.addObject("produtos", produtos);
return modelAndView;
}
}
Segue a view lista.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ 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>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>