1
resposta

Dúvida sobre o link action/controller

Bom dia Professor, tudo bem?

Como o spring faz a relação da action com a controller através desta instruções, eu acho que me escapou a explicação e voltando os videos não achei mais o explicativo. ${s:mvcUrl('CCC#remover').arg(0, item.produto.id).arg(1,item.tipoPreco).build() } o CCC -> CarrinhoComprasController, ele busca pelo o CamelCase?

1 resposta

Oi Juliano, bom dia! Tudo bom?

Não sou o professor, mas acho que posso dar uma ajudinha.. :)

É exatamente isso que você sugeriu! O CCC corresponde à classe CarrinhoComprasController por causa do CamelCase.

Sendo mais completa:Cada método de classe controller ganha pelo Spring um nome padrão pra ser linkado na view, no nosso caso, na action do form.Esse nome padrão é formado justamente pelas letras maiúsculas da classe controller, seguido de um # e do nome completo do método logo depois.Dá pra colocar outro nome pra linkar o método na view, substituindo o nome padrão definido. Pra isso, é só colocar o atributo name na tag @RequestMapping do método.Essa explicação está comentada na documentação do Spring aqui: https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html

No código do curso, usando o nome padrão pra linkar ao método, ficaria justamente como está na explicação do curso.

Se usar o atributo name do @RequestMapping, o código do CarrinhoComprasController ficaria assim:

@RequestMapping(path="/remover", name="removeProduto")
 public ModelAndView remover(Integer produtoId, TipoPreco tipoPreco){
    carrinho.remover(produtoId, tipoPreco);
    return new ModelAndView("redirect:/carrinho");
 }

E o form ficaria assim:

<td class="remove-item">
    <form action="${s:mvcUrl('removeProduto').arg(0, item.produto.id).arg(1,item.tipoPreco).build() }" method="post">
        <input type="image" src="/excluir.png" alt="Excluir" title="Excluir" />
    </form>
</td>