5
respostas

Taglib c:url x s:mvcUrl

Prezados, boa noite.

Gostaria de saber qual a diferença entre as taglibs c:url e s:mvcUrl e se eu poderia substituir no detalhe.jsp o c:url value="/carrinho/add" por s:mvcUrl("CCC#add").build().

Att Dirley

5 respostas

"s:mvcUrl" é uma taglib usada em projetos Spring MVC que serve para criar uma URL a partir de um request mapping do seu Controller.

A tag JSTL <c: url> é usada para formatação de URLs em geral e, opcionalmente, armazena a URL em uma variável.

No fim das contas dá para usar qualquer uma delas (=

Abraço!


<form action="${s:mvcUrl('CCC#add').arg(0,produdo.id).build() }" method="post" class="container">
import br.com.casadocodigo.loja.daos.ProdutoDAO;
import br.com.casadocodigo.loja.models.CarrinhoCompras;
import br.com.casadocodigo.loja.models.CarrinhoItem;
import br.com.casadocodigo.loja.models.TipoPreco;

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

        @Autowired
        ProdutoDAO produtoDao;

        @Autowired
        CarrinhoCompras carrinho;

        @RequestMapping("/add")
        public ModelAndView add(Integer produtoId, TipoPreco tipoPreco) {

            System.out.println("entrou em add "+produtoId);
            carrinho.add(new CarrinhoItem(produtoDao.findProduto(produtoId), tipoPreco));

            return new ModelAndView("redirect:/produtos");
        }
}

Então porque o trecho acima não funciona?

o produtoId inserido no form de detalhe.jsp não é passado como parâmetro para o método add do controller CarrinhoComprasController, nem passando por argumento através do mvcUrl... porém, se eu usar <c:url ... >, funciona perfeitamente.

Chega a lançar algum erro quando você tenta passar com o s:mvcUrl?

Nenhum erro. Apenas chega null nos parâmetros.

Prezados, boa tarde.

Ainda não obtive uma resposta a minha dúvida. Poderiam me ajudar?