(Vraptor) LinkTo com dois métodos de mesmo nome no controller (Bug?)

Olá amigos do forum,. Por gentileza,

Tenho esse controller

@Resource
public class XptoController{

    public void index(){
       ....
    }
    public void index(String parametro){
       ....
    }
}

E no jsp, ao utilizar o linkTo tentando acessar o metodo com parametro,

${linkTo[XptoController].index['parametro']}

Ocorreu um NullPointerException.

Dando uma olhada no codigo do VRaptor vi que o LinkToHandler encontrou o método “index” sem parametros, pois o codigo tenta encontrar o metodo no controller que tenha o mesmo nome do que foi informado no jsp. E no caso o primeiro retornado foi o que não tem o parametro. Depois ao tentar tratar os parametros passados pelo jsp ocorre o erro.

Pra resolver, eu alterei o controller dessa forma

@Resource
public class XptoController{

    @Path({"/", "/{parametro}"})
    public void index(String parametro){
       ....
    }
}

Inclui um if pra validar se o parametro foi passado e o problema foi resolvido. De qualquer forma, isso é um bug no framework, ou a minha idéia de sobrecarregar o método que não tem nada a ver? :lol:

Obrigado amigos!

é uma limitação do linkTo mesmo…

ia complicar bastante o código se a gente tentasse suportar esse caso… mas é possível.
Quer tentar corrigir isso e mandar um pull request?


obrigado lucas,

me pareceu que nao ia ser muito facil mesmo de resolver, o codigo encontra o metodo antes de saber quais são parametros…posso tentar fazer sim mas acho que nao vai ficar bonito nao :lol: . O que voce acha de armazenar apenas o nome do metodo, e adiar a busca pelo Method até o momento do toString do objeto Linker? Dessa forma já haveria um array de parametros pra ajudar a buscar o metodo correto…

a gente pode fazer isso sim, só usar mais um proxy… tenta aí e eu te dou uns toques de como melhorar :wink: