Problema com uri - vraptor

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:

&lt;form action="${pageContext.request.contextPath}/estabelecimento/listar/cidade=Belo+Horizonte" method="get" &gt; ..... &lt;/form&gt;
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&lt;Estabelecimento&gt; 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:

&lt;form action="${pageContext.request.contextPath}/estabelecimento/listar/" method="get" &gt; &lt;input type="text" name="por" /&gt; &lt;input type="text" name="parametro" /&gt; &lt;/form&gt;

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&lt;Estabelecimento&gt; 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