1
resposta

Usar ${s:mvcUrl('PC#grava').build() } é uma boa pratica? Se eu tivesse PessoaController.java teria erro em produção.

Criei uma classe PessoaController. java com um método gravar só para ver o estouro:

GRAVE: Servlet.service() for servlet [dispatcher] in context with path [/casadocodigo] threw exception [javax.el.ELException: Problems calling function 's:mvcUrl'] with root cause java.lang.IllegalArgumentException: No unique match for mapping mappingName PC#gravar: [public org.springframework.web.servlet.ModelAndView br.com.casadocodigo.loja.controllers.PessoaController.gravar(br.com.casadocodigo.loja.models.Produto,org.springframework.validation.BindingResult,org.springframework.web.servlet.mvc.support.RedirectAttributes), public org.springframework.web.servlet.ModelAndView br.com.casadocodigo.loja.controllers.ProdutosController.gravar(br.com.casadocodigo.loja.models.Produto,org.springframework.validation.BindingResult,org.springframework.web.servlet.mvc.support.RedirectAttributes)]

Como esperado deu erro porque não é o único camel case que atende PC#grava. Se na minha implementação do jsp de pessoa eu tivesse feito sem usar PC#grava, eu quebraria o form.jsp de produto sem saber.

Não achei uma boa escolha usar isso. Além de ficar marcando erro no Eclipse.

1 resposta

Olá André, tudo bem ?

Existe uma forma mais indicada nestes casos.

@RequestMapping(value = "/url", name = "nomeDaAction")
public String minhaAction() {
    return "minhaJsp"
}

Você pode usar a propriedade name da annotation @RequestMapping na função mvcUrl.

${s:mvcUrl('nomeDaAction').build() }

Assim você não corre o risco de ter problemas, já que a propriedade name é única por action.

Espero ter ajudado. Abraço!