galera,
estou pegando o seguinte erro
`` ev 03, 2016 1:49:50 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/SpringMvc] threw exception [An exception occurred processing JSP page /WEB-INF/views/produtos/lista.jsp at line 27
24:
Stacktrace:] with root cause java.lang.IllegalArgumentException: Mapping mappingName not found: PC#detalhe at org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder.fromMappingName(MvcUriComponentsBuilder.java:245) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.el.parser.AstFunction.getValue(AstFunction.java:112 ``
lista.jsp
<%@page import="javax.servlet.descriptor.TaglibDescriptor"%>
<%@ 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"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Listagem de livros</title>
</head>
<body>
<table>
<tr>
<td>Título</td>
<td>Descriçao</td>
<td>páginas</td>
<td>Detalhe</td>
</tr>
<!-- foreach para imprimir a listagem de produtos -->
<c:forEach items="${produtos}" var="produto">
<tr>
<td>${produto.titulo}</td>
<td>${produto.descricao}</td>
<td>${produto.paginas}</td>
<td><a href="${s:mvcUrl('PC#detalhe').arg(0,produto.id).build()}">${produto.titulo}</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
ProdutoController
package org.SpringMvc.loja.controller;
import java.util.List;
import javax.validation.Valid;
import org.SpringMvc.loja.daos.ProdutoDao;
import org.SpringMvc.loja.infra.Filesaver;
import org.SpringMvc.loja.modelos.Produto;
import org.SpringMvc.loja.modelos.TipoPreco;
import org.SpringMvc.loja.validation.ProdutoValidation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/produtos")
public class ProdutosController {
@Autowired
private ProdutoDao produtoDao;
@Autowired
private Filesaver filesaver;
@InitBinder
public void initBind(WebDataBinder dataBinder) {
dataBinder.addValidators(new ProdutoValidation());
}
@RequestMapping("/form")
public ModelAndView form(Produto produto){
ModelAndView ModelAndView = new ModelAndView("produtos/form");
ModelAndView.addObject("tipos",TipoPreco.values());
System.out.println("acessando produto controller");
return ModelAndView;
}
@RequestMapping(method=RequestMethod.POST)
public ModelAndView gravar(MultipartFile sumario ,@Valid Produto produto, BindingResult result){
System.out.println(sumario.getOriginalFilename());
if(result.hasErrors()){
return form(produto);
}
//seta o arq onde será salvo o sumario-file
String path = filesaver.write("arquivos-sumario", sumario);
//seta o arquivo no produto
produto.setSumarioPath(path);
produtoDao.gravar(produto);
return new ModelAndView("redirect:produtos/ok");
}
/**
@RequestMapping("/detalhe")
public ModelAndView Detalhe(Integer id){
ModelAndView modelAndView = new ModelAndView("/produtos/detalhe");
Produto produto= produtoDao.find(id);
modelAndView.addObject("produto", produto);
return modelAndView;
}*/
@RequestMapping("/detalhe/{id}")
public ModelAndView Detalhe(@PathVariable("id") Integer id){
ModelAndView modelAndView = new ModelAndView("/produtos/detalhe");
Produto produto= produtoDao.find(id);
modelAndView.addObject("produto", produto);
return modelAndView;
}
@RequestMapping(method=RequestMethod.GET)
public ModelAndView listar(){
List<Produto> produtos= produtoDao.listar();
ModelAndView modelAndView = new ModelAndView("/produtos/lista");
System.out.println("acessando /produtos/lista");
modelAndView.addObject("produtos",produtos);
return modelAndView;
}
}
sei que ele nao está achando o mapeamento PC#detalhe, mas como corrigir?