VRaptor - Problemas com ${linkTo} (3.5.0)

Amigos,

Dado esse controller:

@Resource
public class Controller

    @Path({"/", "{algo}")
    public void metodo(String algo){
    }
}

eu invoco esse método no jsp via linkTo sem problemas, sem passar parametros

${linkTo[Controller].metodo}

Bom atualizei pra versão mais recente do VRaptor (3.5.0) e nao está funcionando na invocacao sem parametros, não tenho a exception agora mas o erro diz respeito ao numero de argumentos do metodo (a exception avisa que está faltando argumentos)

Quando comecei a usar isso, minha ideia a principio era sobrecarregar o metodo, discuti isso aqui com o lucas uns meses atras e vimos que o linkTo não se comportava bem se o controller tivesse mais de um metodo de mesmo nome, então fiz essa gambiarrazinha ai na anotação @Path pra atender as duas urls, e como o linkTo conseguia gerar o link mesmo sem os parametros do metodo mantive assim.

Alias pra funcionar agora tive que fazer isso…

${linkTo[Controller].metodo['']}

Argh! :lol:

Alguma alteração na nova versão quebrou esse comportamento (encontrar o metodo mesmo sem os argumentos)? Agora só vai funcionar com os dois metodos no controller?

Valeu!

O linkTo foi alterado pra tentar fazer o match dos parâmetros, se tiver mais de um método com o mesmo nome… mas deveria funcionar normal se só tem um método com esse nome:

vc consegue debuggar e ver se ele tá caindo nesse condicional?

Oi lucas, desculpe nao coloquei bem o cenário, a exceçao ocorreu nessa classe: https://github.com/caelum/vraptor/blob/master/vraptor-core/src/main/java/br/com/caelum/vraptor/http/route/DefaultParametersControl.java, no método fillUri (entrou no if na primeira linha desse método). No caso a exceção reporta que o método tem um parametro mas não foi passado nenhum no array de parametros desse método.

Ainda nao debuguei mas olhando o codigo do linkTo…se eu usar assim no jsp:

${linkTo[MeuController].metodo}

o método que alimenta a coleçao de argumentos (método get) não vai ser invocado né, entao a lista de args vai ficar vazia mesmo…tá errado.

Compare como o código estava antes, o objeto Linker recebia um Method como argumento no construtor e os args eram criados a partir desse method, então sempre batia com os argumentos necessários pro método. Agora está dependente do que foi passado no JSP…

Vou debugar pra confirmar minha “teoria” e reporto aqui, valeu!

gerei um snapshot com a correção:
https://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.5.1-SNAPSHOT/vraptor-3.5.1-20130418.142121-1.jar

testa por favor?

[quote=Lucas Cavalcanti]gerei um snapshot com a correção:
https://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.5.1-SNAPSHOT/vraptor-3.5.1-20130418.142121-1.jar

testa por favor?[/quote]

Testado e homologado…no aguardo da 3.5.1

[quote=alias][quote=Lucas Cavalcanti]gerei um snapshot com a correção:
https://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.5.1-SNAPSHOT/vraptor-3.5.1-20130418.142121-1.jar

testa por favor?[/quote]

Testado e homologado…no aguardo da 3.5.1[/quote]

Acho que você consegue alterar o seu pom.xml para utilizar a versão snapshot até que saia a versão definitiva.

Realmente dá pra fazer isso, é o que faço nesses casos. Ainda assim, sempre é melhor a versão definitiva, hehe. Valeu!

to tentando epgar a versão 3.5.1 pelo gradle mas não to conseguindo…

alguma ajuda?

[code]
–buildscript
maven {
url: “https://oss.sonatype.org/content/repositories/snapshots/
}

–dependencia

compile ("br.com.caelum:vraptor:3.5.1-SNAPSHOT") {
	exclude group: 'org.springframework' 	
	exclude group: 'org.aspectj'
	exclude module: 'jfree'		
}[/code]

aqui funcionou com:

repositories {
    mavenCentral()
    mavenRepo url: "https://oss.sonatype.org/content/repositories/snapshots/"
}
...
dependencies {
    compile group: 'br.com.caelum', name: 'vraptor', version: '3.5.1-SNAPSHOT'
    ...
}