Hi, I'm developing custom IModel implementation which will be used as a model in forms. This model is able to record changes made by a form in the editing object (POJO). I do not store this changes directly to the base object, but they are stored somwhere inside this model (eg. in a Map of properties). Then when I try to read a property value firstly I check if this value was modified, if so then value stored inside a model is returned, if value was not modified property value from the base (original) object is returned. There are some more things in this model implementation, but they are not important in context of current message.
Now I want to use standard property models to couple my IModel implementation with form and form components. But the problem is that all of these classes (AbstractPropertyModel, PropertyModel, etc.) use PropertyResolver for geting/seting property values, so it is done using reflection on object inside a model. These calls to PropertyResolver (and PropertyResolverConverter) are "hardcoded" in theirs implementations. If I can define my own PropertyResolver then I will be able to use these property models with my custom model. Maybe we should define IPropertyResolver interface with methods similar to these in PropertyResolver and then in "PropertyModel" classes define a method getPropertyResolver() which can be overriden in descending classes? Of course in the PropertyResolver all methods could not be static then. Another possible solution would be to pass IPropertyResolver implementation (or better IPropertyResolverProvider with getPropertyResolver() method) in property models constructor call to allow customization of "property resolving mechanism". This is a comment to AbstractPropertyModel class: * Serves as a base class for different kinds of property models. By default, this class uses * [EMAIL PROTECTED] PropertyResolver} to resolve expressions on the target model object. Note that the * property resolver by default provides access to private members and methods. If guaranteeing * encapsulation of the target objects is a big concern, you should consider using an alternative * implementation. "By default, this class uses PropertyResolver..." - but there is no way to easy change this to some another resolver. The only way is to override all of these getObject(), setObject(), getObjectClass(), getPropertyField(), getPropertyGetter(), getPropertySetter() methods. Ok I know, I can do that and probably I will do, by maybe it is worth to think if extracting such interface as IPropertyResolver is a good concept? Best regards, Daniel --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]