For the record I answer my own question:

Thomas Menke wrote:
> Hi,
> 
> if have the following classes:
> 
> abstract class Customer
> {
>    public String name;
>    abstract public getMaximumAllowedBooks();
> }
> 
> class NormalCustomer extends Customer
> {
>    public getMaximumAllowedBooks() { return 5; }
> }
> 
> class VIPCustomer extends Customer
> {
>    public String name;
>    public getMaximumAllowedBooks() { return 50; }
> }
> 
> The method getMaximumAllowedBooks() returns the number of books a 
> Customer is allowed to lend in paralell.
> These classes are part of a program to manage a fictional library. It's 
> not meant to make to much sense, it is just a learning application for me.
> Now I have a form for an administrator to add customers. He chooses the 
> type of customer from a drop down menu and enters a name. The text field 
> with the name is called "customer.name" for stripes to be able to auto 
> populate the form and to bind the name to the customer immediately. The 
> ActionBean of the form has a property
> "public Customer customer;".
> Additionally there is an enum type with all available classes:
> "public Customer.Type customerType;"
> Problem is: I need to instantiate customer based on the information in 
> customerType. But before I can read customerType I can't instantiate the 
> correct class because I don't know which type. And after the 
> customerType has been set by stripes it is already too late because 
> stripes already tried and failed to set the customer.name property.
> 
> What would be the "best" way to deal with this?

Stripes populates the values in order of the length of the name of the
property. Thus I just need to make sure that this:
public Customer.Type customerType;
is shorter than that:
public Customer customer;

It is not right now, thus I rename customerType to cType. Then I use a
setter-method for cType which is guaranteed to be called prior to
setting any nested values of customer by stripes. In this method I
instantiate the correct sub class of Customer and assign it to customer.
And everything works fine.

Special thanks to bgunter&aporter for explaing that to me :-).

Thomas

------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Stripes-users mailing list
Stripes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/stripes-users

Reply via email to