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?
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?
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?
posta a classe UnidadeFederacao plz
usando exatamente essa classe funcionou aqui…
tenta receber a UF direto no método do controller…
public void save(..., UnidadeFederacao uf) {...}
e no select
<select name="uf">
exatamente isso funcionou aqui…
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:
public class AAA {
private UnidadeFederacao teste;
public void setTeste(UnidadeFederacao teste) {
this.teste = teste;
}
public UnidadeFederacao getTeste() {
return teste;
}
}
recebi isso no método e tb funcionou…
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
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 ${uf}? 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
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
select name="advogado.endereco.estado"
name="advogado.endereco.estado" class="input-select">
<c:forEach var="uf" items="${listUF}">
<option value="${uf}">${uf}</option>
</c:forEach>
</select>
stack
2010-01-31 14:26:48.143::WARN: /juriprev/advogado/save
br.com.caelum.vraptor.http.InvalidParameterException: Unable to find the correct constructor
at br.com.caelum.vraptor.http.ognl.ReflectionBasedNullHandler.nullPropertyValue(ReflectionBasedNullHandler.java:98)
at ognl.ASTProperty.getValueBody(ASTProperty.java:118)
at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
at ognl.SimpleNode.getValue(SimpleNode.java:236)
at ognl.ASTChain.setValueBody(ASTChain.java:222)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:279)
at ognl.Ognl.setValue(Ognl.java:737)
at ognl.Ognl.setValue(Ognl.java:783)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createViaOgnl(OgnlParametersProvider.java:133)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createRoot(OgnlParametersProvider.java:108)
Sim, estou passando um lista de instancias para o JSP via UnidadeFederacao.values()
Iterando no JSP:
<select name="advogado.endereco.estado" class="input-select">
<c:forEach var="uf" items="${listUF}">
<option value="${uf}">${uf}</option>
</c:forEach>
stack inteira
2010-01-31 16:01:11.527::WARN: /juriprev/advogado/save
br.com.caelum.vraptor.http.InvalidParameterException: Unable to find the correct constructor
at br.com.caelum.vraptor.http.ognl.ReflectionBasedNullHandler.nullPropertyValue(ReflectionBasedNullHandler.java:98)
at ognl.ASTProperty.getValueBody(ASTProperty.java:118)
at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
at ognl.SimpleNode.getValue(SimpleNode.java:236)
at ognl.ASTChain.setValueBody(ASTChain.java:222)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:279)
at ognl.Ognl.setValue(Ognl.java:737)
at ognl.Ognl.setValue(Ognl.java:783)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createViaOgnl(OgnlParametersProvider.java:133)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createRoot(OgnlParametersProvider.java:108)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.getParametersFor(OgnlParametersProvider.java:90)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.getParametersFor(ParametersInstantiatorInterceptor.java:83)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:68)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:46)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:285)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:835)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:641)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:208)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:378)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:368)
at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
Caused by: java.lang.NoSuchMethodException: br.com.atttecnologia.juriprev.model.common.UnidadeFederacao.<init>()
at java.lang.Class.getConstructor0(Class.java:2678)
at java.lang.Class.getDeclaredConstructor(Class.java:1953)
at br.com.caelum.vraptor.http.ognl.GenericNullHandler.instantiate(GenericNullHandler.java:70)
at br.com.caelum.vraptor.http.ognl.ReflectionBasedNullHandler.nullPropertyValue(ReflectionBasedNullHandler.java:79)
... 53 more
Exatamente.
Todos eles tem o construtor padrão indiretamente, já que não possui nenhum outro (o compilador gera pra mim o contrutor default).
/**
*
* Representa um estado da federação.
*
*
* @author [email removido]
*
*/
public enum UnidadeFederacao {
AC("Acre"), AL("Alagoas"), AM("Amazonas"), AP("Amapá"), BA("Bahia"), CE("Ceará"), DF("Distrito Federal"), ES("Espírito Santo"), GO(
"Goiás"), MA("Maranhão"), MG("Minas Gerais"), MS("Mato Grosso do Sul"), MT("Mato Grosso"), PA("Pará"), PR("Paraná"), PB(
"Paraíba"), PE("Pernambuco"), PI("Piauí"), RJ("Rio de Janeiro"), RN("Rio Grande do Norte"), RS("Rio Grande do Sul"), RO(
"Rondônia"), RR("Roraima"), SC("SantaCatarina"), SP("SãoPaulo"), SE("Sergipe"), TO("Tocantins");
private String descricao;
UnidadeFederacao(String descricao) {
this.descricao = descricao;
}
public String descricao() {
return this.descricao;
}
}
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?
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 ?