Oi pessoal, tenho uma Classe na minha BusinessObjects Customer e CustomerContainer e na minha DatabaseObjects tenho a Classe CustomerDAO, além dessas camadas tenho a camada de GUI (com GuiCustomer) e a camada Model (com CustomerModel)…agora é o seguinte, queria fazer um esquema de validacao dinamico, sem que eu precisasse ficar verificando na minha GUI se o valor foi digitado corretamente ou nao. Pelo que sei o mais correto, é a validacao do Objeto, ou seja: se tenho a propriedade Name e DateOfBirth na minha Classe Customer, como validaria isso de forma dinamica?
No caso se nao for valid criar uma lista com os erros gerados numa Collection e se o tamanho dessa Collection entao for > 0 entao mostrar essa lista de erros.
Tem alguma Pattern de validacao que seja interessante eu dar uma olhada?
muito obrigado garcia, vou dar uma estudada a respeito. infelizmente ainda nao tive experiencia com hibernate, mas qualquer dúvida posto aqui de volta!
abracos
G
garcia-jj
Mesmo o nome tendo Hibernate no meio, não tem nada a ver com o Hibernate. A JSR303 com o nome Bean Validation permite que você use esse tipo de coisa, e o Hibernate Validator implementa a JSR303.
ja estou lendo a documentacao, mas dei uma olhada rapidao por cima…é só pra web? estou trabalhando com swing e sou leigo em java ainda!
muito obrigado
G
garcia-jj
groh, como eu falei lá no meu primeiro post, o Hibernate Validator funciona para qualquer coisa, seja ambiente web como desktop. E mesmo o nome dele sendo Hibernate Validator ele roda sozinho, sem precisar do Hibernate.
O Hibernate Validator implementa a JSR303 (te passei o link logo acima). Essa JSR303 especficia uma forma de validar um bean a partir de anotações. Um exemplo é algo como querer validar um cliente e dizer que, por exemplo, o nome não pode ser nulo.
publicclassCustomer{@NotNullprivateStringname;}
Para chamar a validação você precisa iniciar a factory do validator:
// inicia a factoryValidatorFactoryfactory=Validation.byDefaultProvider().configure().buildValidatorFactory();// aqui você valida seu objeto, e retorna uma lista com os erros de validaçãofinalSet<ConstraintViolation<?>>violations=validator.validate(bean)
G
groh
garcia mto obrigado pela atencao…estou até agora tentando usar esse validator no meu projeto, pelo que andei lendo é mesmo muito mao na roda! baixei o Hibernate Validator 4.0 Beta 1, mas quando adiciono o .jar na minha Library e chamo por import:
importorg.hibernate.validator;
recebo um aviso de erro que em [color=red]org[/color] onde diz que essa biblioteca nao existe, ou algo assim!
estou tentando aprender também o que é classpath, pra ver se consigo registrar o .jar la, mas por enquanto sem chances! rs…
uma hora sai…
baixei um tutorial que explica, mas com a versao do Validator 3.0, vamos ver o que vai dar!!!
muito obrigado novamente!
G
groh
garcia, tudo bem?
olha, consegui de alguma forma acoplar o validator ao meu projeto. o problema é que nao sabia que tinha que adicionar a pasta /lib na minha Library. Pensei que somente o .jar resolvesse, mas tudo bem! Agora funciona, porém nao consigo chamar o Abstract Factory. Aqui esta minha classe cliente:
(nao esquente com a nomenclatura, esta em alemao e Kunde significa cliente)
publicclassKunde{privateintkundenID;privateStringname;privateStringadresse;privateinthausNummer;privateStringemail;privateKundenDAOmyDAO;//<editor-fold defaultstate="collapsed" desc="Initialize">voidInitialize(){this.kundenID=-1;this.name=null;this.adresse=null;this.hausNummer=-1;this.email=null;this.myDAO=KundenDAO.getInstance();}//</editor-fold>publicKunde(){Initialize();}publicKunde(intkundenID,Stringname,Stringadresse,inthausNummer,Stringemail){this.kundenID=kundenID;this.name=name;this.adresse=adresse;this.hausNummer=hausNummer;this.email=email;this.myDAO=KundenDAO.getInstance();this.myDAO.save(this);}// <editor-fold defaultstate="collapsed" desc="Getters and Setters">@NotNullpublicStringgetAdresse(){returnadresse;}publicvoidsetAdresse(Stringadresse){this.adresse=adresse;}@NotNull@EmailpublicStringgetEmail(){returnemail;}publicvoidsetEmail(Stringemail){this.email=email;}@NotNullpublicintgetHausNummer(){returnhausNummer;}publicvoidsetHausNummer(inthausNummer){this.hausNummer=hausNummer;}@NotNullpublicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}// </editor-fold>}
Agora tentei recuperar na minha GUI a exception, mas nada, entao tentei fazer como vc disse
Absent Code attribute in method that is not native or abstract in class file javax/validation/Validation
:?:
G
garcia-jj
Agora que eu ví tuas mensagens, sorry
Acho que esse último erro quer dizer que você não possui o jar que contém a classe javax.validation.Validation. Você vai precisar adicionar também o jar validation-api-1.0.0.GA.jar que vem junto com o hibernate-validator.
Não use a documentação do Hibernate Validator 3 para o Hibernate Validator 4, pois são completamente diferentes. Nos links que eu te passei logo lá encima tem a documentação do 4.
Quanto ao resto dos teus códigos, está tudo certo, você aprendeu mesmo como fazer. Basta agora você importar aquele jar e tudo vai funcionar.
Abraços
G
groh
caracas, as vezes dou gracas a deus em programar c#…rs
valeu garcia, depois posto a solucao aqui, acho que esse tópico pode ser útil pra outras pessoas depois, abracos