Validar os parametros dos metodos nos controllers Vraptor

402 views
Skip to first unread message

Diabo Loiro

unread,
Mar 26, 2014, 1:02:01 AM3/26/14
to caelum-...@googlegroups.com

Ola gostaria de interceptar os parametros passados nos controllers do vraptor anotados com @validate por exemplo e no "aspecto/interceptador" eu faria algo tipo

validator.validate(parametro) \redirecionar erros

vi nesse link um proxy dinamico na hora de fazer a injeção http://vraptor.caelum.com.br/pt/cookbook/poupando-recursos-lazy-dependency-injection/ porém não me atende.

1 - gostaria de saber tem algo que eu possa usar built-in do vraptor para fazer isso ou se tenho que colocar um aspectJ ou outra implementecão de aspectos?

2 - gostaria de saber se eu usar o vraptor4 com cdi teria algum suporte para relizar isso ou teria que colocar alguma implementaçao de aspecto no projeto mesmo, vi esse link e nao achei nada sobre isso na documentação ou de como fazer no vraptor 3 https://groups.google.com/forum/#!msg/caelum-vraptor/sAUaoGBieuY/TifEYe0bt68J

Obrigado

Rafael Ponte

unread,
Mar 26, 2014, 5:30:39 AM3/26/14
to caelum-...@googlegroups.com
Oi Diabo Loiro,

No VRaotor4 isso já é possível com Bean Validations. Só que no caso a anotação é @Valid. 

Dá uma olhada no capítulo sobre validações da documentação. 
--
You received this message because you are subscribed to the Google Groups "caelum-vraptor" group.
To unsubscribe from this group and stop receiving emails from it, send an email to caelum-vrapto...@googlegroups.com.
To post to this group, send email to caelum-...@googlegroups.com.
Visit this group at http://groups.google.com/group/caelum-vraptor.
For more options, visit https://groups.google.com/d/optout.


--

Otávio Garcia

unread,
Mar 26, 2014, 7:58:57 AM3/26/14
to caelum-...@googlegroups.com

Também é possível no vraptor 3 com o jar do hibernate-validator 5.

Sent from my Motorola Atrix™

Bruno Daniel Marinho

unread,
Mar 26, 2014, 1:00:39 PM3/26/14
to caelum-...@googlegroups.com
vou testar pelo que tinha visto no livro do vraptor e na documentaçao para validar vc tem chamar explicitamente validator.validate(parametro)  e nao gostaria de ter esse codigo repetitivo em meus controllers, queria quer o framework chamasse automatico ou em  um "aspecto", mais sendo mais especifico na pergunta como eu posso fazer um proxy dinamico do controller de todos os metodos do controller?

talvez sobrescrevendo algum componente do vraptor que trata os parametros da request, não sei.

mais vou testar aqui se com @valid o vraptor ja valida a request.

obrigado.




You received this message because you are subscribed to a topic in the Google Groups "caelum-vraptor" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/caelum-vraptor/-M1G0cRdaEs/unsubscribe.
To unsubscribe from this group and all its topics, send an email to caelum-vrapto...@googlegroups.com.

To post to this group, send email to caelum-...@googlegroups.com.
Visit this group at http://groups.google.com/group/caelum-vraptor.
For more options, visit https://groups.google.com/d/optout.



--
----------------------------------------------
Bruno Daniel Marinho

Diabo Loiro

unread,
Mar 26, 2014, 1:40:20 PM3/26/14
to caelum-...@googlegroups.com
usando o vraptor 3 eu fiz 


public void save(@Valid Note note) {

}

a classe tem algo assim

public class Note extends AbstractEntity {

@NotBlank
private String name;}


ai fiz um interceptor para o redirect

@Intercepts
public class TesteInter implements Interceptor {

private Validator validator;
public TesteInter(Validator validator) {
this.validator=validator;
}
@Override
public boolean accepts(ResourceMethod arg0) {
return true;
}

@Override
public void intercept(InterceptorStack arg0, ResourceMethod arg1,
Object arg2) throws InterceptionException {
validator.onErrorRedirectTo(NoteController.class).create();
arg0.next(arg1, arg2);
}

}

ao passar os campos completos funciona, agora ao deixa o campo em branco em vez dele redirecionar para o controler que eu mandei ele ignora e joga um 500 na tela.

não entendi por que se estou chamando o validator antes de proceguir no metodo.

quem joga a exception é esse cara  at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)

sera que teria como eu sobrescrever o comportamento dele algo do estilo?

Em quarta-feira, 26 de março de 2014 14h00min39s UTC-3, Diabo Loiro escreveu:
vou testar pelo que tinha visto no livro do vraptor e na documentaçao para validar vc tem chamar explicitamente validator.validate(parametro)  e nao gostaria de ter esse codigo repetitivo em meus controllers, queria quer o framework chamasse automatico ou em  um "aspecto", mais sendo mais especifico na pergunta como eu posso fazer um proxy dinamico do controller de todos os metodos do controller?

talvez sobrescrevendo algum componente do vraptor que trata os parametros da request, não sei.

mais vou testar aqui se com @valid o vraptor ja valida a request.

obrigado.


Em 26 de março de 2014 08:58, Otávio Garcia <ota...@otavio.com.br> escreveu:

Também é possível no vraptor 3 com o jar do hibernate-validator 5.

Sent from my Motorola Atrix™

On Mar 26, 2014 6:30 AM, "Rafael Ponte" <rpo...@gmail.com> wrote:
Oi Diabo Loiro,

No VRaotor4 isso já é possível com Bean Validations. Só que no caso a anotação é @Valid. 

Dá uma olhada no capítulo sobre validações da documentação. 

On Wednesday, March 26, 2014, Diabo Loiro <bdms...@gmail.com> wrote:

Ola gostaria de interceptar os parametros passados nos controllers do vraptor anotados com @validate por exemplo e no "aspecto/interceptador" eu faria algo tipo

validator.validate(parametro) \redirecionar erros

vi nesse link um proxy dinamico na hora de fazer a injeção http://vraptor.caelum.com.br/pt/cookbook/poupando-recursos-lazy-dependency-injection/ porém não me atende.

1 - gostaria de saber tem algo que eu possa usar built-in do vraptor para fazer isso ou se tenho que colocar um aspectJ ou outra implementecão de aspectos?

2 - gostaria de saber se eu usar o vraptor4 com cdi teria algum suporte para relizar isso ou teria que colocar alguma implementaçao de aspecto no projeto mesmo, vi esse link e nao achei nada sobre isso na documentação ou de como fazer no vraptor 3 https://groups.google.com/forum/#!msg/caelum-vraptor/sAUaoGBieuY/TifEYe0bt68J

Obrigado

--
You received this message because you are subscribed to the Google Groups "caelum-vraptor" group.
To unsubscribe from this group and stop receiving emails from it, send an email to caelum-vraptor+unsubscribe@googlegroups.com.
To post to this group, send email to caelum-vraptor@googlegroups.com.


--

--
You received this message because you are subscribed to the Google Groups "caelum-vraptor" group.
To unsubscribe from this group and stop receiving emails from it, send an email to caelum-vraptor+unsubscribe@googlegroups.com.
To post to this group, send email to caelum-vraptor@googlegroups.com.

--
You received this message because you are subscribed to a topic in the Google Groups "caelum-vraptor" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/caelum-vraptor/-M1G0cRdaEs/unsubscribe.
To unsubscribe from this group and all its topics, send an email to caelum-vraptor+unsubscribe@googlegroups.com.
To post to this group, send email to caelum-vraptor@googlegroups.com.

Lucas Cavalcanti

unread,
Mar 26, 2014, 3:31:06 PM3/26/14
to caelum-vraptor
qual exception?


To unsubscribe from this group and stop receiving emails from it, send an email to caelum-vrapto...@googlegroups.com.
To post to this group, send email to caelum-...@googlegroups.com.

Bruno Daniel Marinho

unread,
Mar 26, 2014, 3:37:43 PM3/26/14
to caelum-...@googlegroups.com
[ERROR] Unhandled exception occurred whilst decorating page
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: javax.validation.ConstraintViolationException: Validation failed for classes [br.com.note.models.Note] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='may not be empty', propertyPath=name, rootBeanClass=class br.com.note.models.Note, messageTemplate='{org.hibernate.validator.constraints.NotBlank.message}'}
]
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:93)
at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.note.repositories.TesteInter.intercept(TesteInter.java:31)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:51)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115)
at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:361)
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:766)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:534)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:879)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:741)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:213)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:403)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:522)
Caused by: javax.validation.ConstraintViolationException: Validation failed for classes [br.com.note.models.Note] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='may not be empty', propertyPath=name, rootBeanClass=class br.com.note.models.Note, messageTemplate='{org.hibernate.validator.constraints.NotBlank.message}'}
]
at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:159)
at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:94)
at org.hibernate.action.internal.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:172)
at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:72)
at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:272)
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:304)
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:195)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:128)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:78)
at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78)
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:725)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:701)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:705)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:853)
at br.com.note.repositories.Repository.create(Repository.java:25)
at br.com.note.controllers.NoteController.save(NoteController.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)
... 51 more
[ERROR] /note/save
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: javax.validation.ConstraintViolationException: Validation failed for classes [br.com.note.models.Note] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='may not be empty', propertyPath=name, rootBeanClass=class br.com.note.models.Note, messageTemplate='{org.hibernate.validator.constraints.NotBlank.message}'}
]
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:93)
at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.note.repositories.TesteInter.intercept(TesteInter.java:31)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:51)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115)
at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:361)
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:766)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:534)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:879)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:741)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:213)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:403)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:522)
Caused by: javax.validation.ConstraintViolationException: Validation failed for classes [br.com.note.models.Note] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='may not be empty', propertyPath=name, rootBeanClass=class br.com.note.models.Note, messageTemplate='{org.hibernate.validator.constraints.NotBlank.message}'}
]
at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:159)
at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:94)
at org.hibernate.action.internal.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:172)
at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:72)
at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:272)
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:304)
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:195)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:128)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:78)
at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78)
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:725)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:701)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:705)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:853)
at br.com.note.repositories.Repository.create(Repository.java:25)
at br.com.note.controllers.NoteController.save(NoteController.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)
... 51 more
^C[INFO] Shutdown hook executing



To unsubscribe from this group and all its topics, send an email to caelum-vrapto...@googlegroups.com.

To post to this group, send email to caelum-...@googlegroups.com.
Visit this group at http://groups.google.com/group/caelum-vraptor.
For more options, visit https://groups.google.com/d/optout.

Lucas Cavalcanti

unread,
Mar 26, 2014, 4:43:36 PM3/26/14
to caelum-vraptor
vc precisa adicionar um validation.xml no seu src/main/resources/META-INF igual a esse


pra desabilitar a validação automática do hibernate validator.

Bruno Daniel Marinho

unread,
Mar 26, 2014, 4:53:42 PM3/26/14
to caelum-...@googlegroups.com
legal poder desabilitar,mais eu quero que validação  ainda aconteça... so quero redirecionar para onde o interceptador ta apontando... por isso tinha perguntado se tem como eu consigo sobrescrever alguma classe do vraptor onde eu possa pegar o parametros do metodo e validar antes da execuçao do metodo original, como um proxy dinamico aop normal.

Otávio Garcia

unread,
Mar 26, 2014, 4:55:19 PM3/26/14
to caelum-...@googlegroups.com

Por que você quer implementar algo que o vraptor já faz?

Sent from my Motorola Atrix™

Bruno Daniel Marinho

unread,
Mar 26, 2014, 5:15:56 PM3/26/14
to caelum-...@googlegroups.com
Otávio Garcia Se eu coloco @valid ele joga o erro pro usuario o que eu não quero , quero apenas configurar que quando der um erro de validaçao  que ele faça uma açao generica.

 1 - Por exemplo se no meu form eu tivesse um hidden digamos formAction onde eu armazene qual o controller e action que renderiza aquele form.

quando eu receber a request eu chamo o validate do beansvalidator se der erro eu mando redirecionar para esse formAction que é um parametro da requisiçao, mandado os erros junto ,assim eu limparia todo codigo repetitivo de redirecionamento dos controllers que 90% das vezes é redirecionar para o form para o cara digitar os campos corretamente.
estou aprendendo vraptor mais pelo que vi eu tenho que fazer validator.validate(obj) e depois falar para onde eu devo redirecionar em caso de erro em todos meus controllers

2 - estou tentando aprender como mudar o customizar o comportamento do framework, por exemplo no trabalho uso spring mvc e agente usa alguns aspectos para fazer alguns tratamentos genericos, queria ver o quanto eu conseguiria fazer no vraptor sem colocar um lib de aspectos.

Esse cara conseguiu fazer mais ele ta usando um "evento" do vraptor 4 com cdi

gostaria de saber se rola fazer no 3, se posso sobrescrever alguma classe especial ou se é melhor colocar aop no projeto mesmo.

Obrigado pela ajuda de todos e a paciencia rs.

Bruno Marinho

unread,
Mar 26, 2014, 5:17:45 PM3/26/14
to caelum-...@googlegroups.com

Bruno Marinho

unread,
Mar 26, 2014, 5:29:14 PM3/26/14
to caelum-...@googlegroups.com
So contextualizando a ideia  que eu estava tentando  implementar.

Quando eu tiver um controller.formulario eu gostaria de interceptar a resposta e fazer algo como result.include("OriginController","nomedocontroller via reflection") e result.include("actiondocontroller","actiondocontroller via reflection") e colocar em hidden do form.

ai quando eu chamar um controller qualquer achar que tenha parametros anotatos com @valid. ele pega o parametro chama validator.validade(obj) se tiver erros ele redireciona com  validator.onErrorUsePageOf(xx.class).xx(); onde o xx.class e o metodo xx(). que eu pegaria do hiddem do form e usaria reflection.

Não sei se fui conseguir explicar o que eu gostaria direito.

de qualquer forma obrigado.

Lucas Cavalcanti

unread,
Mar 26, 2014, 9:48:26 PM3/26/14
to caelum-vraptor
Vc tá usando VRaptor 3 ou 4?


o problema é o momento que esse interceptor é executado. Ele precisa ser logo após o VRaptor fazer a validação, e antes do método ser executado.


--

Bruno Daniel Marinho

unread,
Mar 27, 2014, 12:09:01 AM3/27/14
to caelum-...@googlegroups.com

Estou usando o 3 estou esperando o 4 sair final pra migrar

You received this message because you are subscribed to a topic in the Google Groups "caelum-vraptor" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/caelum-vraptor/-M1G0cRdaEs/unsubscribe.
To unsubscribe from this group and all its topics, send an email to caelum-vrapto...@googlegroups.com.

Lucas Cavalcanti

unread,
Mar 27, 2014, 12:28:13 AM3/27/14
to caelum-vraptor
Então anote seu interceptor com:
@Intercepts(before = ExecuteMethodInterceptor.class, after = MethodValidatorInterceptor.class)

Bruno Daniel Marinho

unread,
Mar 27, 2014, 12:10:36 PM3/27/14
to caelum-...@googlegroups.com
eu estava usando o vraptor 3.4.x atualizei pra ultima versao do vraptor 3

por que nao existia ainda o MethodValidatorInterceptor na versao que eu estava.

quando eu coloco


import br.com.caelum.vraptor.InterceptionException; import br.com.caelum.vraptor.Intercepts; import br.com.caelum.vraptor.Validator; import br.com.caelum.vraptor.core.InterceptorStack; import br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor; import br.com.caelum.vraptor.interceptor.Interceptor; import br.com.caelum.vraptor.resource.ResourceMethod; import br.com.caelum.vraptor.validator.MethodValidatorInterceptor; import br.com.note.controllers.NoteController; @Intercepts(before = ExecuteMethodInterceptor.class, after = MethodValidatorInterceptor.class) public class TesteInter implements Interceptor { private Validator validator; public TesteInter(Validator validator) { this.validator=validator; } @Override public boolean accepts(ResourceMethod arg0) { return true; } @Override public void intercept(InterceptorStack arg0, ResourceMethod arg1, Object arg2) throws InterceptionException { validator.onErrorRedirectTo(NoteController.class).create(); arg0.next(arg1, arg2); } }

ele volta.

HTTP ERROR: 500


Guice configuration errors:

1) Could not find a suitable constructor in br.com.caelum.vraptor.validator.MethodValidatorInterceptor. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.
  at br.com.caelum.vraptor.validator.MethodValidatorInterceptor.class(MethodValidatorInterceptor.java:54)
  while locating br.com.caelum.vraptor.validator.MethodValidatorInterceptor

1 error

RequestURI=/note/list

Caused by:

com.google.inject.ConfigurationException: Guice configuration errors:

1) Could not find a suitable constructor in br.com.caelum.vraptor.validator.MethodValidatorInterceptor. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.
  at br.com.caelum.vraptor.validator.MethodValidatorInterceptor.class(MethodValidatorInterceptor.java:54)
  while locating br.com.caelum.vraptor.validator.MethodValidatorInterceptor

1 error
	at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1004)
	at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:961)
	at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1013)
	at br.com.caelum.vraptor.ioc.guice.GuiceProvider$GuiceContainer.instanceFor(GuiceProvider.java:62)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:47)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:93)
	at br.com.caelum.vraptor.ioc.guice.GuiceProvider.provideForRequest(GuiceProvider.java:82)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:99)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115)
	at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
	at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:361)
	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:766)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417)
	at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
	at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:324)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:534)
	at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:864)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:533)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:207)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:403)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:522)

Powered by Jetty://


Lucas Cavalcanti

unread,
Mar 27, 2014, 1:21:45 PM3/27/14
to caelum-vraptor
vc precisa do hibernate validator 5.x

Bruno Daniel Marinho

unread,
Mar 27, 2014, 1:39:24 PM3/27/14
to caelum-...@googlegroups.com
Obrigado Lucas Cavalcanti funcionou! a parte do redirecionamento do erro, agora para finalizar eu gostaria de interceptar o objeto result que vai pra tela de todos os controllers para eu poder incluir o controler/action que gerou o formulario e por em um hiddem... tem algum outro lugar onde eu possa interceptar o objeto result que vai para o usuario? estou procurando, talvez depois desse cara? https://github.com/caelum/vraptor/blob/master/vraptor-core/src/main/java/br/com/caelum/vraptor/interceptor/OutjectResult.java

Lucas Cavalcanti

unread,
Mar 27, 2014, 4:54:29 PM3/27/14
to caelum-vraptor
vc tá falando do Result que vc recebe no controller, ou o retorno do método?

Bruno Daniel Marinho

unread,
Mar 27, 2014, 5:02:39 PM3/27/14
to caelum-...@googlegroups.com
Acredito que seja do Result, pois gostaria de quando chamar digamos o action "UsuarioController.formulario" poder pegar o nome do controller e do metodo e colocar no result para renderizar em um input hidden no form.

ai em qualquer tela quando der erro de validaçao no interceptor de validaçao eu pego esse campo hidden e redireciono para a pagina de origem.

Lucas Cavalcanti

unread,
Mar 27, 2014, 5:36:10 PM3/27/14
to caelum-vraptor
coloque um interceptor normal, e use o ResourceMethod pra fazer isso

method.getMethod().getName()
method.getResource().getType().getSimpleName()

e use result.include

Bruno Marinho

unread,
Mar 28, 2014, 11:34:44 AM3/28/14
to caelum-...@googlegroups.com
Funcionou fico da hora obrigado.
Reply all
Reply to author
Forward
0 new messages