VRaptor - Problemas com ${linkTo} (3.5.0)

8 respostas
A

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!

8 Respostas

L

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?

A

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!

L

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?

A

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?

Testado e homologado…no aguardo da 3.5.1

N

alias:
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?

Testado e homologado…no aguardo da 3.5.1

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

A

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

D

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

alguma ajuda?
--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'		
	}
L

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'
    ...
}
Criado 16 de abril de 2013
Ultima resposta 26 de abr. de 2013
Respostas 8
Participantes 4