[VRaptor]: Injetando tipos genericos no Controller

O VRaptor consegue injetar tipos genericos no controller?

Tenho um cenario mais ou menos assim:

[code]public abstract class XPTOController<T> {
public void fazAlgumaCoisa(T entity) {
}
}

public class SuaEntityController extends XPTOController<SuaEntity> {
}

public class MinhaEntityController extends XPTOController<MinhaEntity> {
}[/code]
Era pra ele injetar a MinhaEntity no Controller corretamente?

Se eu fizer a operação na SuaEntityController ele injeta corretamente mas se depois disso eu for usar a MinhaEntityController ele continua injetando a SuaEntity no MinhaEntityController. E vice e versa. Na verdade ele assume que o T e a Entity do primeiro controller utilizado :confused:

isso funciona (pelo menos na última versão)

só que na hora de popular os dados vc precisa mandar:

entity.umaPropriedade=1234
entity.outraPropriedade=5678

ou seja, o primeiro nome é o que vc colocou no método fazAlgumaCoisa.

[quote=Lucas Cavalcanti]isso funciona (pelo menos na última versão)

só que na hora de popular os dados vc precisa mandar:

entity.umaPropriedade=1234
entity.outraPropriedade=5678

ou seja, o primeiro nome é o que vc colocou no método fazAlgumaCoisa.[/quote]

Lucas, boa tarde!

Há algum tempo eu tentei usar genéricos e obtive o mesmo problema. Mesmo lendo agora a solução que vc passou, não consegui compreender exatamente.
Supondo que o método fazAlgumaCoisa insira dados no banco a partir do preenchimento da entidade que veio via Post de um formulário qualquer, oq vc quer
dizer com o entity.umaPropriedade=1234 ? Esses dados já não vem preenchidos na view???

o que eu quis dizer são os parâmetros que vc envia num formulário, por exemplo

Sim, esse dados vem preenchidos da view. O que ele quis dizer e que o nome da sua propriedade input tem que ser o nome que vc usou no parametro do metodo fazAlgumaCoisa ( nessa caso entity ) .nomeDaPropriedadeDoSeuObjeto

Exemplo:

No MeuController eu espero receber uma instancia da classe Instituicao que tem uma propriedade nome então tenho que no JSP usar entity.nome
No SeuController eu espero receber uma instancia da classe Aluno que tem a propriedade nota então tenho que no JSP usar entity.nota

E por ai vai.

Agora entendi. muito simples, comi bola! =/

Obrigado.

passos, mas isso não está funcionando? vc está com a versão 3.3.1 do vraptor?

Segura na ponta :slight_smile: To atualizando pro VRaptor pra 3.3.1, estava usando a 3.2.0 e que deu alguns problemas :confused:

SEVERE: Exception starting filter vraptor java.lang.NoSuchMethodError: com.google.common.base.Objects.firstNonNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

Se eu coloca a dependencia do google-collections

&lt;dependency&gt; &lt;groupId&gt;com.google.collections&lt;/groupId&gt; &lt;artifactId&gt;google-collections&lt;/artifactId&gt; &lt;version&gt;0.8&lt;/version&gt; &lt;/dependency&gt;
Da outro erro:

troca o google collections pelo guava:


<dependency>
		    <groupId>com.google.guava</groupId>
		    <artifactId>guava</artifactId>
		    <version>r07</version>
		</dependency>

Entrei em loop

Se eu coloco o guava da o erro:

Se eu coloco o google-collection ele da o erro acima

Descobri o problema. Com o Guava apenas resolve esse problema. O problema e que uso um outro framework que usa o google-collections :confused:

Lucas,

Ultima forma sobre a injeção de parametros genericos no controller

VRpator 3.3.1 = Funciona
VRaptor 3.2.0 = Não Funciona

o Guava é a evolução do Google Collections… ele compativel com o google collections antigo (a maior parte pelo menos) então vc não vai ter problemas em usá-lo.