The following code works fine:
context.setValidatingObjectsOnCommit(false);
ValidationResult validationResult = new ValidationResult();
company.validateForInsert(validationResult);
if(validationResult.hasFailures()) {
List failures = validationResult.getFailures();
for(int i = 0; i < failures.size(); i++) {
ValidationFailure tmp = (ValidationFailure)
failures.get(i);
System.out.println("\n" + tmp.getDescription());
}
}
else {
context.commitChanges();
}
If I don't lower the flag ValidatingObjectsOnCommit (which means "dirty"
objects will be validated automatically), how can I handle the
validation failures?
Is there any way to do something like the following:
try {
context.commitChanges();
}
catch(Some ValidationException thrown earlier) {
// Get failures list and print error messages.
}
Nikos
Στις 11-03-2009, ημέρα Τετ, και ώρα 10:30 +0200, ο/η Andrus Adamchik
έγραψε:
> > Is the following correct?
>
>
> Looks about right. Also there's a few pre-canned classes implementing
> ValidationFailure in the org.apache.cayenne.validation package that
> can be used to build failures.
>
> > Or how can I retrieve the error message
> > from the validationResult when a ValidationException is thrown
>
> http://cayenne.apache.org/doc/api/org/apache/cayenne/validation/ValidationResult.html
>
> Use 'getFailures()' to get a list of failures, and analyze them one by
> one using ValidationFailure methods.
>
> Andrus
>
> On Mar 11, 2009, at 9:36 AM, Νίκος Παράσχου wrote:
>
> > Thank you Andrus,
> >
> > Yes, I do not throw the exception myself. But, how am I going to
> > handle
> > the exception thrown by Cayenne? Or how can I retrieve the error
> > message
> > from the validationResult when a ValidationException is thrown, so
> > that
> > I can print it in the GUI?
> >
> > Is the following correct?
> >
> > ..verride
> > protected void validateForSave(ValidationResult validationResult) {
> > super.validateForSave(validationResult);
> >
> > if(getCompanyName().equalsIgnoreCase("")) {
> >
> > validationResult.addFailure(new ValidationFailure() {
> >
> > ..verride
> > public Object getSource() {
> > return this;
> > }
> >
> > ..verride
> > public Object getError() {
> > return Company.CNAME_PROPERTY;
> > }
> >
> > ..verride
> > public String getDescription() {
> > return "My error message";
> > }
> > });
> > }
> > }
> >
> > Nikos
> >
> > Στις 10-03-2009, ημέρα Τρι, και ώρα 18:16 +0200, ο/
> > η Andrus Adamchik
> > έγραψε:
> >> The code example looks about right. However this is probably what's
> >> wrong: "When a specific condition is not met, a ValidationException
> >> is
> >> thrown.". You should not throw the exception yourself. Just add an
> >> error to the validationResult, and let Cayenne throw it later.
> >>
> >> Andrus
> >>
> >>
> >> On Mar 10, 2009, at 5:03 PM, Νίκος Παράσχου wrote:
> >>
> >>> Hello,
> >>>
> >>> I implemented validateForSave(ValidationResult validationResult) in
> >>> one
> >>> of my ObjEntities. When a specific condition is not met, a
> >>> ValidationException is thrown.
> >>>
> >>> How can I handle this ValidationException?
> >>>
> >>> The following doesn't work (I get: ValidationException is not thrown
> >>> anywhere inside block try{}):
> >>>
> >>> try {
> >>> mycontext.commit();
> >>> }
> >>> catch(ValidationException vex) {
> >>> ...
> >>> }
> >>>
> >>> Thank you,
> >>> Nikos
> >>>
> >>>
> >>>
> >>
> >
> >
>
This archive was generated by hypermail 2.0.0 : Wed Mar 11 2009 - 05:02:39 EDT