Duvida com VALIDATOR do VRaptor  XML
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Autor Mensagem
thiefofwisdom
JavaBaby

Membro desde: 03/09/2009 14:39:44
Mensagens: 99
Localização: Sao Paulo
Offline

Olá pessoal!
Estou tendo uma duvida com o Validator do VRaptor, seguindo a apostila da Caelum.
Apliquei as validation tags nas entities :


Agora preciso implementar isso na logic, correto?
Com oque tinha na apostila, nao consegui...
Coloquei assim :

e tomei essa exception na cara :


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: java.lang.NullPointerException
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:99)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause

java.lang.NullPointerException
org.vraptor.plugin.hibernate.HibernateLogicMethod.validateObject(HibernateLogicMethod.java:120)
org.vraptor.plugin.hibernate.HibernateLogicMethod.validateField(HibernateLogicMethod.java:82)
org.vraptor.plugin.hibernate.HibernateLogicMethod.validate(HibernateLogicMethod.java:57)
org.vraptor.core.ValidatorEngine.validate(ValidatorEngine.java:35)
org.vraptor.interceptor.SettingAndValidationInterceptor.intercept(SettingAndValidationInterceptor.java:101)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.InjectionInterceptor.intercept(InjectionInterceptor.java:41)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.ComponentLookupInterceptor.intercept(ComponentLookupInterceptor.java:5
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
lojavirtual.store.DAOInterceptor.intercept(DAOInterceptor.java:17)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.FlashScopeInterceptor.intercept(FlashScopeInterceptor.java:22)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.RegisterAttributesInteceptor.intercept(RegisterAttributesInteceptor.java:3
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:9
org.vraptor.core.DefaultController.execute(DefaultController.java:46)
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Alguem sabe o que pode estar acontecendo? O que posso ter esquecido?
Nota, estou usando o VRpator 2.5 e o HIbernate Validator 3.0

Thanks

_______THIEF_______
[Email] [MSN]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

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

Olá,

você está passando algum parâmetro para a requisição, do tipo cd.titulo=Abc, cd.id=2, e coisas do tipo?


já deu uma olhada no VRaptor 3? http://vraptor.caelum.com.br/documentacao/

[]'s

--
Caelum
www.caelum.com.br

thiefofwisdom
JavaBaby

Membro desde: 03/09/2009 14:39:44
Mensagens: 99
Localização: Sao Paulo
Offline

Opa... vlw pela atenção...
Entao.. eu estou fazendo um trabalho de faculdade co urgencia me baseado nisso, porisso q estou seguindo a risca e nao quis mudar pro VRptor 3.... nem o os validators do hibernate...
O pessoal que pega ess aapostila q é iniciante q nem eu dev eter muita dificuldade, pq se vai buscar na net os jars, pega tudo atualizado. E dai vai dar um monte de erro.
Eu apaguei tudo oq eu tinha feito de validations com o hibernate e VRaptor e refiz.. dai deu certo.. devia ter escritoo algo errado. Quando terminar o projeto eu vou postar ele auqi no forum pra galera ter um pronto ja pra se basera e vou tentar deixar todas as coisas q eu tive dificuldade e que me fiseram perder mt tempo...
Estou agora com outra duvida no mesmo projeto. A duvida é a seguinte :
Qaundo sou lançado da tela de cadastramento de algum produto para a tela que lista os produtos, se dou um refresh na pagina (f5), ele adiciona outro produto identico..
Imagino que em algum lugar eu devia estar zerando alguma coisa... e nao estou. Engraçado q eu nao vi nada na apostila...
Alguem sabe isso?

Abraços!

This message was edited 1 time. Last update was at 18/11/2009 18:11:45


_______THIEF_______
[Email] [MSN]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

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

Olá,

esse problema do F5 acontece por causa de uma diferença entre redirect no cliente e redirect no servidor...

dá uma olhada nessa página: http://vraptor.caelum.com.br/documentacao/view-e-ajax/ na seção Redirecionamento e Forward

pra resolver esse problema no VRaptor2, você precisa ir na linha do views.properties que redireciona do adiciona.ok para a listagem,
e colocar um "redirect:" na frente:


ou algo parecido com isso

[]'s

--
Caelum
www.caelum.com.br

thiefofwisdom
JavaBaby

Membro desde: 03/09/2009 14:39:44
Mensagens: 99
Localização: Sao Paulo
Offline

Blza cara... deu certissimo... esse era o pior bug q tava dando no meu sisteminha...
Ow... c sabe como eu faço pra setar um boolean pelo form usando um checkbox sem usar javascript?
Na verdade nem com javascript eu consegui...
Fiquei em duvida tbem se na entity eu deveria colocar esse boolean como objeto ou primitivo...
Achei q se o user nao clicasse na check box ele ia setar com false... e se clicasse como true...
A parte do true funfa..mas se nao dar um check, fica como null a propriedade...
Pensei em colocar como primitivo, q ja vem com o valor false como padrao, mas ai o vraptor tenta jogar null no primitivo, oq logicamente da uma exception na minha cara..

Obrigado mais uma vez pela ajuda.... c trampa na caelum?

_______THIEF_______
[Email] [MSN]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

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

olá,

o problema com checkboxes eh que qdo eles estão checados eles vão pra requisição, e quando não estão checados eles não vao pra requisição.

vc tá recebendo o boolean como argumento do método, ou dentro de outro objeto?

se for como argumento do método, você pode receber o Boolean e se estiver null vc toma o valor como falso...
se for dentro de outro objeto, vc pode usar boolean, pois se o parâmetro não vier na requisição (checkbox não checado) o vraptor não vai tocar no campo boolean e ele vai ficar falso...

e sim, eu sou da caelum =)

--
Caelum
www.caelum.com.br

thiefofwisdom
JavaBaby

Membro desde: 03/09/2009 14:39:44
Mensagens: 99
Localização: Sao Paulo
Offline

entao veio... o esquema ta dentro do objeto...
Tenho um objeto produto e tem dentro dele um boolean "promocional"...
quando eu tentei deixar como boolean, nao rolou.. deu a exception q eu te falei, sacou...
oq eu posso fazer é colocar logica dentro do codigo pra setar isso quando tiver null... mas achei q seria meio gambiarra... queria fazer o esquema que vc falou ai funcionar...
c tem ctza q se for primitivo e tiver dentro do objeto produto, o vraptor nao reclama? pq peloq eu to vendo, mesmo se nao tiver clicado, ele tenta jogar null no atributo promocional...

Legal.. ja fiz um curso de java preparatorio pra certificacao ai... passei! lol

_______THIEF_______
[Email] [MSN]
thiefofwisdom
JavaBaby

Membro desde: 03/09/2009 14:39:44
Mensagens: 99
Localização: Sao Paulo
Offline

affe.. mandei duas vezes a msg......

This message was edited 1 time. Last update was at 21/11/2009 00:29:59


_______THIEF_______
[Email] [MSN]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

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

o Vraptor não vai tentar setar null, pq o parâmetro nem vai pra requisição... o vraptor só mexe nos parametros que vem da requisição...

parabéns pela certificação =)

--
Caelum
www.caelum.com.br

thiefofwisdom
JavaBaby

Membro desde: 03/09/2009 14:39:44
Mensagens: 99
Localização: Sao Paulo
Offline

Uai... q doidera... to fazendo alguma outra coisa errada entao.. olha como ta meu jsp :


e se liga na exception.... mesmo se eu setar com true.... da erro dos dois jeitos

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Null value was assigned to a property of primitive type setter of lojavirtual.bean.Product.promotional
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:95)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause

org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of lojavirtual.bean.Product.promotional
org.hibernate.property.DirectPropertyAccessor$DirectSetter.set(DirectPropertyAccessor.java:83)
org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:337)
org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:200)
org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3571)
org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:133)
org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854)
org.hibernate.loader.Loader.doQuery(Loader.java:729)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
org.hibernate.loader.Loader.doList(Loader.java:2213)
(...)

root cause

java.lang.IllegalArgumentException: Can not set boolean field lojavirtual.bean.Product.promotional to null value
sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
sun.reflect.UnsafeBooleanFieldAccessorImpl.set(Unknown Source)
java.lang.reflect.Field.set(Unknown Source)
org.hibernate.property.DirectPropertyAccessor$DirectSetter.set(DirectPropertyAccessor.java:79)
org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:337)
org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:200)
org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3571)
org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:133)
org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854)
org.hibernate.loader.Loader.doQuery(Loader.java:729)
(...)

_______THIEF_______
[Email] [MSN]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

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

então...

o atributo value do checkbox é o que vai pra requisição, o que vc quis fazer é isso:



ou seja, o chk vai estar checado se ${product.promotional} for true...

o que estava acontecendo, eh que o HTML gerado era:


então quando vc checava o chk ele mandava pra requisição



que o vraptor traduz como null e dá pau...

e se eu não me engano vc não precisa colocar o value="true", isso é o padrão de um chkbox

[]'s

--
Caelum
www.caelum.com.br

thiefofwisdom
JavaBaby

Membro desde: 03/09/2009 14:39:44
Mensagens: 99
Localização: Sao Paulo
Offline

Blza.. vou testar.,..
ow... eu to tentando setar um Double e ta dando erro de cast... `

Nov 21, 2009 1:31:09 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet vraptor2 threw exception
java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.String
at org.hibernate.validator.NotEmptyValidator.isValid(NotEmptyValidator.java:36)
at org.hibernate.validator.ClassValidator.getInvalidValues(ClassValidator.java:385)
at org.hibernate.validator.ClassValidator.getInvalidValues(ClassValidator.java:351)

Onde no VRaptor eu vejo como ele ta setando? Ele ja nao tenta fazer a conversao automatica?

_______THIEF_______
[Email] [MSN]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

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

você não pode colocar @NotEmpty num campo Double, só vale para strings (e collections, talvez)...

troque por @NotNull

[]'s

--
Caelum
www.caelum.com.br

thiefofwisdom
JavaBaby

Membro desde: 03/09/2009 14:39:44
Mensagens: 99
Localização: Sao Paulo
Offline

HAUHAUAHUAHAUHA
porra... q noob!
logico... not empty é pra nao ser nem nulo e nem vazio... drrrrrrrrrrrrrrr
vlws cara...

cara... vi isso aqui na apostila e acho q ta errado... se liga :

Esse "-" entre musica e musica.id existe??? (id="musica-${musica.id}"> pq ele ta pegando o meu id e colocando um - na frente... pegando id negativo...

_______THIEF_______
[Email] [MSN]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

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

acho que tá certo sim...

é pro id do li ficar algo do tipo

musica-45
musica-229

etc...

é só um separador =)

--
Caelum
www.caelum.com.br

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