2
respostas

Página detalhe.jsp não acessa /carrinho/add quando usado servletRelativeAction

Prezados, boa noite.

Quando utilizado o action "abaixo" no botão da pagina detalhe, o funcionamento ocorre normalmente.

<form action="<c:url value='/carrinho/add' />" method="post" class="container">

//códigos

<input type="hidden" name="${_csrf.parameterName }" value="${_csrf.token }" />
</form>

porém, após alterar para o uso do servletRelativeAction "abaixo" a url é alterada, logo apresentando erro por não encontrar a url do carrinho.

<form:form servletRelativeAction="/carrinho/add" method="post" cssClass="container">

//Códigos

</form:form>

Minha classe "CarrinhoComprasController"

@Controller
@RequestMapping("/carrinho")
@Scope(value = WebApplicationContext.SCOPE_REQUEST)
public class CarrinhoComprasController {

    @Autowired
    private ProdutoDao produtoDao;

    @Autowired
    private CarrinhoCompras carrinho;

    @RequestMapping("/add")
    public ModelAndView add(Integer produtoId, TipoPreco tipoPreco) {
        ModelAndView modelAndView = new ModelAndView("redirect:/carrinho");
        CarrinhoItem carrinhoItem = criaItem(produtoId, tipoPreco);
        carrinho.add(carrinhoItem);
        return modelAndView;
    }

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView itens() {
        return new ModelAndView("carrinho/itens");
    }

    private CarrinhoItem criaItem(Integer produtoId, TipoPreco tipoPreco) {
        Produto produto = produtoDao.find(produtoId);
        CarrinhoItem carrinhoItem = new CarrinhoItem(produto, tipoPreco);

        return carrinhoItem;
    }

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

}

O que poderia ser?

2 respostas

Fala João, tudo bem ?

Cara que estranho, de cara assim não tenho muita ideia do porque pode estar ocorrendo esse problema.

Como ficou a url gerada no caso problemático ? Dê um Inspect Element no browser pra ver como foi gerado o html correspondente ao seu jsp, principalmente na parte do form.

Boa tarde Rafael.

O erro apresenta a url


Request URL: http://localhost:8080/casadocodigo_smvc/produtos/detalhe/9/carrinho/add

Estranho, ele acrescenta "/carrinho/add" na frente, por isso ele não encontra.

Inspecionado com action="", que funciona

<form action="/casadocodigo_smvc/carrinho/add" method="post" class="container">

Inspecionado com servletRelativeAction = "/carrinho/add", que NÃO funciona

<form id="command" class="container" action="/casadocodigo_smvc/produtos/detalhe/13/carrinho/add" method="post">

Desde já obrigado.