Matej Knopp wrote:
Hi,

On Tue, Feb 26, 2008 at 11:13 AM, Sebastiaan van Erk
<[EMAIL PROTECTED]> wrote:
Matej Knopp wrote:
 > model.getFirstName() can't really return IModel, if
 > Customer.getFirstName() returns string.
 >
 > Anyway, I like the idea, but I don't like the syntax. instead of one
 > line [add(new TextField("id", model).setRequred(true)) ] you have now
 > three separate lines.
 >
 > So I was thinking of something more like
 >
 > SafePropertyModel<Customer> model = new 
SafePropertyModel<Customer>(customer);
 >
 > add(new TextField("tf", model.bind(model.proxy().getCustomerName()
 > )).setRequired(true));
 >
 > This way you can have it one one line.
 >
 > -Matej

 So proxy() returns a Customer proxy?

 And model.bind() takes an Object argument (considering we don't know in
 advance what type getCustomerName() returns)... What about primitive
 types? Overload bind() for those as well?
Well, the return object is not important at all. What is important is
the getCustomerName() call. That marks somewhere in the model that
last accessed property was called "customerName". and then immediately
after this model.bind takes this information.

OK, that's what I described. :-) And I was being stupid with respect to the overloading. If bind takes an object as argument, then overloading will not be necessary due to autoboxing. :-)

 And the call to getCustomerName() has the side effect of setting a model
  object somewhere (e.g., in an instance field of model) which
 model.bind() can subsequently return?
Model bind will return a model (variation of propertymodel probably).
It will take the information that getCustomerName call on proxy
provided.

Ok, so the proxy remembers which getter was called last, and you use that to construct the model in bind(). Of course.

 Very interesting. I don't like the proxy() method name though. If you
 call it something like property() it will look more like you're binding
 to a property of Customer:
Well, the naming can certainly be improved. I'm not sure about
"property()" though. Well, we can discuss this more anyway.
 model.bind(model.property().getCustomerName())

Neither am I. :-) For one, it's quite long. But on the other hand, you do bind to a model property, and so it reads ok. I think that proxies should be "invisible" for general users, so they shouldn't have to understand the magic going on here, nor that proxies are involved.

 VERY neat idea though... :-)
Thanks.

What I really like about this solution is that it can be implemented completely separately from wicket-core, so you can just put it in it's own project. :-)

Regards,
Sebastiaan

-Matej
 Regards,
 Sebastiaan



 >
 > On Fri, Feb 8, 2008 at 6:17 PM, Johan Compagner <[EMAIL PROTECTED]> wrote:
 >> don't worry about creating the models
 >>  That will happen anyway in 1.3 (that needs to be done for example to get 
the
 >>  right object especially when we generify stuff)
 >>
 >>  see CompoundPropertyModel.wrapOnInheritance()
 >>
 >>  joan
 >>
 >>
 >>
 >>
 >>
 >>  On Feb 8, 2008 5:41 PM, Scott Swank <[EMAIL PROTECTED]> wrote:
 >>
 >>  > Interesting.  So
 >>  >
 >>  >   model.getFirstName()
 >>  >
 >>  > would return a PropetyModel based on the results of proxy.eval()?  If
 >>  > I understand you correctly that creates many models (one per
 >>  > component) instead of reusing a single model, but that may well not be
 >>  > the end of the world.  Or does getFirstName() return a CompoundModel
 >>  > that is properly bound this this component?  Intriguing none the less.
 >>  >  I hadn't considered this option, but I'm going to play with it a bit.
 >>  >  I rather like that direction.
 >>  >
 >>  >
 >>  > On Feb 8, 2008 8:29 AM, Johan Compagner <[EMAIL PROTECTED]> wrote:
 >>  > > i try to look at this this weekend, but i have a quick question
 >>  > > I find it a bit verbose can't it be a bit shorter like this (just an
 >>  > > example)
 >>  > >
 >>  > > SharedPropertyModel<Customer> model = new
 >>  > > SharedPropertyModel<Customer>(customer);
 >>  > > this.setModel(model);
 >>  > >
 >>  > > FormComponent firstName = new CustomerNameField("firstName",
 >>  > > model.getFirstName()).setRequired(true);
 >>  > > add(firstName);
 >>  > >
 >>  > > where getFirstName() returns the model
 >>  > >
 >>  > > johan
 >>  > >
 >>  > >
 >>  > >
 >>  > >
 >>  > >
 >>  > > On Feb 6, 2008 6:57 PM, Scott Swank <[EMAIL PROTECTED]> wrote:
 >>  > >
 >>  > > > One of our more clever developers created a CompoundPropertyModel 
that
 >>  > > > uses a cglib proxy to strongly bind the mutators to the model.  It
 >>  > > > looks like this:
 >>  > > >
 >>  > > >                SharedPropertyModel<Customer> model = new
 >>  > > > SharedPropertyModel<Customer>(customer);
 >>  > > >                this.setModel(model);
 >>  > > >
 >>  > > >                FormComponent firstName = new
 >>  > > > CustomerNameField("firstName").setRequired(true);
 >>  > > >                model.bind(firstName).to().getFirstName();
 >>  > > >                add(firstName);
 >>  > > >
 >>  > > >                FormComponent lastName = new
 >>  > > > CustomerNameField("lastName").setRequired(true);
 >>  > > >                model.bind(lastName).to().getLastName();
 >>  > > >                add(lastName);
 >>  > > >
 >>  > > >                FormComponent addr1 = new
 >>  > > > AddressField("address1").setRequired(true);
 >>  > > >                model.bind(addr1).to().getAddress().getAddress1();
 >>  > > >                add(addr1);
 >>  > > >
 >>  > > >                FormComponent addr2 = new AddressField("address2");
 >>  > > >                model.bind(addr2).to().getAddress().getAddress2();
 >>  > > >                add(addr2);
 >>  > > >
 >>  > > >                FormComponent city = new CityField("city");
 >>  > > >                model.bind(city).to().getAddress().getCity();
 >>  > > >                add(city);
 >>  > > >
 >>  > > > We're happy to share if folk like this approach.  N.B. that the .to()
 >>  > > > call is for readability rather than out of any necessity.
 >>  > > >
 >>  > > > Cheers,
 >>  > > > Scott
 >>  > > >
 >>  > > > --
 >>  > > > Scott Swank
 >>  > > > reformed mathematician
 >>  > > >
 >>  > >
 >>  > > > ---------------------------------------------------------------------
 >>  > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
 >>  > > > For additional commands, e-mail: [EMAIL PROTECTED]
 >>  > > >
 >>  > > >
 >>  > >
 >>  >
 >>  >
 >>  >
 >>  > --
 >>  >  Scott Swank
 >>  > reformed mathematician
 >>  >
 >>  > ---------------------------------------------------------------------
 >>  > To unsubscribe, e-mail: [EMAIL PROTECTED]
 >>  > For additional commands, e-mail: [EMAIL PROTECTED]
 >>  >
 >>  >
 >>
 >
 >
 >




Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to