Pessoal,
sou iniciante com vraptor e estou com um problema com passagem de parametros.
segue o meu form:
<form action="${pageContext.request.contextPath}/estabelecimento/listar" method="get" >
.....
</form>
Método do controller
@Get
@Path("/estabelecimento/listar/{por}={parametro}")
public List<Estabelecimento> listar(String por, String parametro){
...
O meu problema é o seguinte. Da forma que está hoje, quando chamo a ação na página, a url fica da seguinte forma :
http://localhost:8080/Cliente/estabelecimento/listar/?cidade=Belo+Horizonte
Parece que o vraptor não reconhece a interrogação como inicio dos parametros como é em php por exemplo. a uri funciona se eu tirar a interrogação.
Como faço nesse caso? tem alguma configuração do vraptor q aceite essa interrogação?
André Pereira
Olá André, tudo bem?
Então, o problema aí é que os parâmetros devem estar na action do form, desta forma:
<form action="${pageContext.request.contextPath}/estabelecimento/listar/cidade=Belo+Horizonte" method="get" >
.....
</form>
Acredito que não é dessa forma que você quer usar, pois está “fixo”.
Então você deve modificar o @Path para que o parâmetro não seja passado pela URL, desta forma:
@Get
@Path("/estabelecimento/listar/")
public List<Estabelecimento> listar(String por, String parametro){
...
E para que continue funcionando, fique atento ao atributo name dos seus inputs no form, pois devem ter o mesmo nome que o parâmetro, desta forma:
<form action="${pageContext.request.contextPath}/estabelecimento/listar/" method="get" >
<input type="text" name="por" />
<input type="text" name="parametro" />
</form>
PS: Se você usa a versão 3.3.1 ou superior, você pode deixar de usar o @Path e passa o path por parametro no @Get, desta forma:
@Get("/estabelecimento/listar/")
public List<Estabelecimento> listar(String por, String parametro){
...
Assim deu certo ^^, porém perdi a elegância da minha url.
veja como ficou.
http://localhost:8080/Cliente/estabelecimento/listar/?por=cidade& parametro=Belo+Horizonte
antes ficava assim:
http://localhost:8080/Cliente/estabelecimento/listar/cidade=Belo+Horizonte
tem algum outro jeito de deixar da forma antiga?
Sim, tem sim. O VRaptor usa URLs elegantes (ou sexy URLs como o pessoal chamava antigamente).
Coloque no seu controller algo assim:
Dessa forma o VRaptor injeta as variaveis entre {} nos parametros do método.
Ahh, e não esqueça que a cidade está errada. É Belzonte (brincadeira :), hehe)
Então, mas ai voltamos ao problema inicial…
Você pode tentar usar o Post (se você estiver adicionando algo) e ai o que vem depois da interrogação na url some…
o problema é que a action é fixa… vc pode tentar mudar a action do form via javascript, no momento do submit do form