Re: Automated Validation of Attributes

From: Michael Gentry (mgentr..asslight.net)
Date: Wed Mar 10 2010 - 08:32:31 EST

  • Next message: Andrus Adamchik: "Re: aggregated queries"

    Part of this would depend on your UI, too. If you are using Tapestry
    5, for example, it has similar validation built in. Say you have a
    text field with an id=firstName, T5 will invoke (if present)
    onValidateFromFirstName(String newFirstName) for you before ever
    calling the setter. If you throw an exception out of that, T5 will
    know not to call the setter. Once you've gone past that logic (which
    would be the case you mention) it is a bit too late ...

    Not sure if that made sense (I'm still waking up), but I hope so. :-)

    mrg

    On Tue, Mar 9, 2010 at 10:42 PM, Andrew Lindesay <ap..indesay.co.nz> wrote:
    > Hello;
    >
    > As you may know, WebObjects/EOF has the protocol;
    >
    >        NSValidation
    >
    > Specifically, this protocol implements the following two methods;
    >
    >        Object validateTakeValueForKeyPath(Object value, String keyPath)
    >        Object validateValueForKey(Object value, String key)
    >
    > The effect is that when a client tries to write a property "foo", it will ultimately try to invoke;
    >
    >        Object validateFoo(Object value) throws NSValidation.ValidationException
    >
    > ...before...
    >
    >        setFoo(Object value)
    >
    > ...in order to either "repair" the value before assigning or to throw an exception.  This is very handy from the user-interface perspective.  For each attribute of an entity, this technique is also automatically used in the case of "validateForSave()" which means that aside from inter-attribute validation, per-attribute validations can be implemented just once.
    >
    > To provide this same behaviour to Cayenne, I would like to put forward the idea to implement something similar;
    >
    >        validatedWriteProperty(ValidationResult vr, String propName, Object value)
    >        validatedWriteNestedProperty(ValidationResult vr, String propName, Object value)
    >
    > This would use (cached) reflection to look for a "validate" method and fire that before writing the property.  For each attribute of a DataObject's entity, these methods would be fired from;
    >
    >        void validateForSave(ValidationResult validationResult)
    >
    > Does this make sense in the context of Cayenne?
    >
    > Regards;
    >
    > ___
    > Andrew Lindesay
    > www.lindesay.co.nz
    >
    >



    This archive was generated by hypermail 2.0.0 : Wed Mar 10 2010 - 08:33:31 EST