4
respostas

Erro ao Tentar Editar Produto

To com um erro ao tentar editar os produtos.

dez 14, 2019 8:57:36 AM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [dispatcher] in context with path [/projeto-jpa-2] threw exception [javax.el.ELException: Problems calling function [spring:mvcUrl]] with root cause
java.lang.IllegalArgumentException: Mapping not found: cadastraProduto
    at org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder.fromMappingName(MvcUriComponentsBuilder.java:463)
    at org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder.fromMappingName(MvcUriComponentsBuilder.java:433)
    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)

O ProdutoController.


    @Transactional
    @RequestMapping(method=RequestMethod.POST, name="cadastraProduto")
    public String salvar(@ModelAttribute @Valid Produto produto, BindingResult result, RedirectAttributes atts) {

        if(result.hasErrors()) {
            return form(produto);
        }

        produtoDao.insere(produto);

        return "redirect:/";
    }

O form.jsp

    <form action="${spring:mvcUrl('cadastraProduto').build()}" method="post">
4 respostas
<form action="${spring:mvcUrl('PC#cadastraProduto').build()}" method="post">

Só faltou referenciar que o cadastraProduto pertence à ProdutosController(PC).

Fiz a alteração apresenta o erro abaixo

Erro 
java.lang.IllegalArgumentException: Mapping not found: PC#cadastraProduto

Class ProdutoController

package br.com.caelum.controller;

import java.util.List;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
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.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import br.com.caelum.dao.ProdutoDao;
import br.com.caelum.model.Produto;

@Controller
@RequestMapping("/produto")
public class ProdutoController {

    @Autowired
    private ProdutoDao produtoDao;


    //<form action="/projeto-jpa-2/cadastraPoduto" method="post">
    @Transactional
    @RequestMapping(method=RequestMethod.POST, name="cadastraProduto")
    public String salvar(@ModelAttribute @Valid Produto produto, BindingResult result, RedirectAttributes atts) {

        if(result.hasErrors()) {
            return form(produto);
        }

        produtoDao.insere(produto);

        return "redirect:/";
    }

    @RequestMapping(value="/form", method=RequestMethod.GET)
    public String form(Produto produto) { 
        return "produto/form";
    }

    @RequestMapping(value="/{id}/form", method=RequestMethod.GET)
    public String update(@PathVariable Integer id, Model model) {
        Produto produto = produtoDao.getProduto(id);

        model.addAttribute("produto", produto);
        return form(produto);
    }

    @RequestMapping("/{id}")
    public String detalhe(@PathVariable Integer id, Model model) {
        Produto produto = produtoDao.getProduto(id);

        model.addAttribute("produto", produto);
        return "produto/detalhe";
    }    

    @RequestMapping(value="/buscar", method=RequestMethod.POST, name="buscarProdutos")
    public String buscarPor(Model model,
            @RequestParam String nome, 
            @RequestParam Integer categoriaId,
            @RequestParam(required=false) Integer lojaId) {

        List<Produto> produtos = produtoDao.getProdutos(nome, categoriaId, lojaId);

        model.addAttribute("produtos", produtos);

        return "home";

    }
}
tambem apresenta erro usando.

<form action="${spring:mvcUrl('ProdutoController#cadastraProduto').build()}" method="post">

Alguem conseguiu rodar usando essa anotação no form ? poderia disponibilizar o codigo para análise ? grato !!