Enum auto converter funciona?  XML
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Autor Mensagem
seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline

Tenho uma entidade, digamos Pessoa, com uma enum com o nome UnidadeFederacao. O VRaptor não consegue preencher o parâmetro com o valor vindo do formulário, pois, pelo trace, ele está tentando criar uma instância da enum via construtor.. 8|

Como faço para passar um bean, contendo uma enum como atributo, como argumento para o método do controller?


JSP




stack


@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6394
Offline

acabei de testar aqui com um enum qualquer e funcionou...

tem certeza que o erro deu por causa do enum?

Vc tá referenciando o enum pela classe do enum mesmo?

--
Caelum
www.caelum.com.br

seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline

Sim, estou passando um lista de instancias para o JSP via UnidadeFederacao.values()



Iterando no JSP:




stack inteira


@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6394
Offline

a propriedade que vc quer setar é advogado.endereco.estado...
esse erro pode ter acontecido ao tentar instanciar advogado, ou endereco ou estado... algum deles não tem construtor padrão? ou tem alguma coisa de diferente?

--
Caelum
www.caelum.com.br

seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline

Exatamente.

Todos eles tem o construtor padrão indiretamente, já que não possui nenhum outro (o compilador gera pra mim o contrutor default).

@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6394
Offline

posta a classe UnidadeFederacao plz

--
Caelum
www.caelum.com.br

seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline


@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6394
Offline

usando exatamente essa classe funcionou aqui...

tenta receber a UF direto no método do controller...



e no select


exatamente isso funcionou aqui...

--
Caelum
www.caelum.com.br

seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline

entendi.. entao é uma exigencia do VRaptor?

ele deve usar os conversores quando injeta no metodo exatamente o tipo da enum. é isso?

agora imagina uma entidade que tem uns 7 enums diferentes? vou declarar todos no metodo?

estou divagando aqui sobre como o vraptor se comporta, populando o bean. ele vai aplicando conversores ao navegar no grafo da entidade? ou quando injeta no metodo?

@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6394
Offline

então... não precisa receber a enum no método e não deve fazer isso... funciona dentro de uma classe tb...

sempre que o tipo desejado é uma enum, mesmo no grafo da entidade, ele usa o converter de enum...

eu pedi pra vc testar de colocar num método pra entender melhor o problema...

Nos seus getters e setters vc tá referenciando o tipo exato da enum?

aqui eu criei:

recebi isso no método e tb funcionou...

--
Caelum
www.caelum.com.br

seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline

entendi.. mas aí cai no mesmo problema das "7 enums" que citei... eu teria que ter as 7 enums declaradas como atributo e seus getters e setters tambem, e dentro de cada metodo que va utiliza-las eu ter que dar um set na entidade que as contem com o valor capturado do jsp.


não é possível eu declarar apenas a entidade Advogado? que tem Endereco e por sua vez a famigerada UnidadeFederacao ?

@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6394
Offline

sim, é possível... se funciona no primeiro nível, funciona em todos os outros...

e o enum como atributo e getters e setters têm que estar dentro das entidades mesmo, não no controller

--
Caelum
www.caelum.com.br

garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline

Só para acrescentar, eu uso muitos enums em meus projetos e todos funcionam muito bem com o vraptor, tanto como propriedades na classe como enviando como parametro do método.

Meus enums são da mesma forma que o seu, usando no caso um chave e valor. Estou usando vraptor 3.1, porém desde o 3.0-beta tem funcionando muito bem.

Analisando tuas classes, você está usando advogado.endereco.estado como nome do campo. Teu método possui o advogado como parametro e esse objeto possui mesmo um endereco.estado, sendo esse estado o enum?

Qual o valor que você está imprimindo em <option value="${uf}">${uf}</option>? Será que está mesmo sendo impresso RS ou "Rio Grande do Sul"? Caso for o segundo creio que a injeção não funcione, pois a inicialização dos enums é via Enum.name().

Abraços
 
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Ir para:   
Powered by JForum 2.1.8 © JForum Team