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

Dúvida no Ex. 4 da Aula 9 - Url amigáveis

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:

${produto.titulo} 25: ${produto.descricao} 26: ${produto.paginas} 27: ${produto.titulo} 28: 29: 30:

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?

2 respostas
solução!

Oi Vinícius, tudo bem?

Eu arriscaria em trocar o nome do seu método de Detalhe pra detalhe :)

Abraços!

obrigado leonardo! era (duh) isso mesmo.