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

Dúvida com o "mvcUrl"

Olá a todos!

Eu não curti muito o uso dessa forma de montar a URL não, no primeiro momento achei legal a url ser gerada dinamicamente com esse recurso mas me parece que isso dá margem pra ambiguidade na url gerada, se eu tiver dois controllers com as mesmas iniciais? tipo produtoController "PC" e pessoaController "PC". Imagino que ele não vai saber pra onde mandar essa requisição. Como contornar essa situação?

4 respostas
solução!

basta que no @RequestMapping vc use o atributo name.. aí vc pode referenciar esse name na funcao.

Olá Alberto,

Então, eu tentei aqui mas não consegui, pode dar um exemplo de como ficaria?

Abaixo o código para facilitar:

  • página
      <form:form action="${ s:mvcUrl('PC#salvar').build()}" method="POST" commandName="produto">
  • controler

    @Controller
    @RequestMapping("/produtos" )
    public class ProdutoController {
    
      @Autowired
      ProdutoDAO produtoDAO;
    
      @RequestMapping("/form")
      public ModelAndView form (){
          ModelAndView model = new ModelAndView("produtos/form");
          model.addObject("tipos", TipoPreco.values());
          return model;
      }
    
      @InitBinder
      public void InitBinder(WebDataBinder binder)
      {
          binder.addValidators(new ProdutoValidator());
      }
    
      @RequestMapping(method=RequestMethod.POST)
      public ModelAndView salvar (@Valid Produto produto, BindingResult result, RedirectAttributes redirectAttributes){        
          if (result.hasErrors()) {
              return form();
          }
          produtoDAO.gravar(produto);
          redirectAttributes.addFlashAttribute("sucesso","Produto cadastrado com sucesso!!!");
          return new ModelAndView("redirect:produtos");
    
      }
    
      @RequestMapping(method=RequestMethod.GET)
      public ModelAndView listar (){
          final List<Produto> produtos = produtoDAO.listar();
          ModelAndView model = new ModelAndView("produtos/lista");
          model.addObject("produtos", produtos);
          return model;
    
      }    
    }
<form:form action="${ s:mvcUrl('salvar').build()}" method="POST" commandName="produto">

  @RequestMapping(name="salvar", method=RequestMethod.POST)
  public ModelAndView salvar (@Valid Produto produto, BindingResult result, RedirectAttributes redirectAttributes){        
      if (result.hasErrors()) {
          return form();
      }
      produtoDAO.gravar(produto);
      redirectAttributes.addFlashAttribute("sucesso","Produto cadastrado com sucesso!!!");
      return new ModelAndView("redirect:produtos");

  }

blz Carlos, consegui fazer aqui. Obrigado!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software