I may have celebrated a bit soon. While the form renders and submits without errors, browsing to a page with a ListView of Client objects shows that no data has been entered. All simple Client properties are empty, and the address field contains an object reference with all null values.
Attempting to edit this entry causes a Hibernate exception: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.alluvion.test.model.Address Also, if I try to go to another page in my form onSubmit() using setResponsePage() the same Hibernate exception is thrown. This happens whether I create a new Address where it is declared or in the getAddress method. My app is originally based on the cdapp demo which uses Hibernate 3 and annotations. Any thoughts greatly appreciated, I'm going to keep looking through the Hibernate docs and maybe test to see if I can persist any embedded objects, not just the ones at creation time. Thanks, Troy On Tue, 2005-13-09 at 12:41 -0700, Igor Vaynberg wrote: > This is a really good practice when you are using hibernate or ejb3. I > believe in some cases it is even required. If you want to do it lazily then > your getters should look something like this: > Public Address getAddress() { > If (address=null) address=new Address(); > Return address; > } > > -Igor > > > -----Original Message----- > > From: [EMAIL PROTECTED] [mailto:wicket-user- > > [EMAIL PROTECTED] On Behalf Of Troy MacNeil > > Sent: Tuesday, September 13, 2005 12:14 PM > > To: wicket-user@lists.sourceforge.net > > Subject: Re: [Wicket-user] Creating Embedded Object via Form > > > > Thanks! protected Address address = new Address() did the trick! > > > > Troy > > > > On Tue, 2005-13-09 at 19:42 +0200, Eelco Hillenius wrote: > > > In the end, (Bound)CompoundPropertyModels are IModels. IModel just has > > > get/setObject, where you can implement anything you want, including > > > object creation etc. > > > > > > CompoundPropertyModels are meant to make your life easier in the sense > > > that you need less code to acchieve model/property binding. The basis > > > however, is PropertyModel. WIth PropertyModel you can bind anything > > > you want, as long as it is a valid two-way Ognl expression. > > > > > > IModel clientFormModel = new CompoundPropertyModel(myClient); > > > setModel(clientFormModel); > > > add(new TextField("address.streetAddress"); > > > > > > is the same as: > > > > > > BoundCompoundPropertyModel clientFormModel = new > > > BoundCompoundPropertyModel(myClient); > > > setModel(clientFormModel); > > > add(clientFormModel.bind(new TextField("nonImportantName"), > > > "address.streetAddress")); > > > > > > is the same as: > > > > > > add(new TextField("nonImportantName", new PropertyModel(myClient, > > > "address.streetAddress")); > > > > > > Now, the problem with your code is that the address is null by > > > default. Ognl doesn't like that, and will throw an exception. There > > > are a zillion ways to tackle this, including patching Ognl, patching > > > PropertyModel, etc, but the simplest way to go here is to make sure > > > you allways have a non-null address property. Either by declaring that > > > property like 'protected Address address = new Address;' - your ORM > > > will overwrite that field when it does have a saved value - or lazily > > > create an instance in your getter - in which case you must make sure > > > the getter is not by-passed by any code generation your ORM might do > > > for you. > > > > > > I don't think you need the converter; it will work in some cases, and > > > for some custom object they can be very convenient/ elegant, but in > > > this case, the fact that your property can be null and Ognl doesn't > > > try object creation is the real issue. > > > > > > Eelco > > > > > > > > > > > > On 9/13/05, Troy MacNeil <[EMAIL PROTECTED]> wrote: > > > > This is ultimately what I want. The Client object will have a > > collection > > > > of addresses, invoices and other objects. The user can view these > > > > objects and add new ones. > > > > > > > > - I can create a form to create a new Client. > > > > > > > > - I can create a form to add an address to an existing Client (at > > least > > > > I think I can;) > > > > > > > > - I can't create a form to create a Client and add an Address at the > > > > same time. Right now I get bind errors if I add fields that aren't > > > > properties of the Client object itself. > > > > > > > > I suspect the solution lies with the property model. My current code > > > > references Client directly: > > > > > > > > IModel clientFormModel = new CompoundPropertyModel(new Client()); > > > > > > > > But I don't have a clear enough understanding of how Compound and > > Bound > > > > property models work. > > > > > > > > Thanks, > > > > Troy > > > > > > > > > > > > On Tue, 2005-13-09 at 09:15 -0700, Igor Vaynberg wrote: > > > > > I think a good way to handle this would be to use two pages. First > > page > > > > > would show the form for the client object properties along with > > properties > > > > > for a single address, the second page would allow the user to add > > additional > > > > > addresses to the client object they created in the previous step. > > Almost > > > > > like a two page wizard. > > > > > > > > > > -Igor > > > > > > > > > > > > > > > > -----Original Message----- > > > > > > From: [EMAIL PROTECTED] [mailto:wicket-user- > > > > > > [EMAIL PROTECTED] On Behalf Of Troy MacNeil > > > > > > Sent: Tuesday, September 13, 2005 8:24 AM > > > > > > To: wicket-user@lists.sourceforge.net > > > > > > Subject: [Wicket-user] Creating Embedded Object via Form > > > > > > > > > > > > This isn't the brightest question I've ever asked, I feel I'm > > missing > > > > > > very obvious. But I don't see an answer in the examples/wiki so > > here > > > > > > goes... > > > > > > > > > > > > I'm wondering how to handle. So for instance if I have a Client > > object > > > > > > which has one or more Address objects as members, how can I create > > a new > > > > > > client using a single form? > > > > > > > > > > > > I've looked at the cdapp example where Categories are linked to > > Albums, > > > > > > what I want is similar except I'd like to create Categories on the > > fly > > > > > > if necessary rather than select from a pre-instantiated list. > > > > > > > > > > > > <form wicket:id="form" action=""> > > > > > > Name: > > > > > > <input type="text" wicket:id="firstName"><br/> > > > > > > Street Address: > > > > > > <input type="text" wicket:id="address.streetAddress"><br/> > > > > > > <input type="submit" value="Add Client"/> > > > > > > </form> > > > > > > > > > > > > @Entity > > > > > > public class Client implements Comparable<Client> { > > > > > > protected Long Id; > > > > > > protected String Name; > > > > > > protected Address address; > > > > > > > > > > > > /*typical getters/setters below */ > > > > > > } > > > > > > > > > > > > @Entity > > > > > > public class Address implements Comparable<Address> { > > > > > > protected Long Id; > > > > > > protected String streetAddress; > > > > > > > > > > > > /*typical getters/setters below */ > > > > > > } > > > > > > > > > > > > Any help or pointers in the right direction greatly appreciated... > > > > > > > > > > > > Thanks, > > > > > > Troy > > > > > > > > > > > > Alluvion Development > > > > > > http://alluvioncorp.com > > > > > > > > > > > > > > > > > > ------------------------------------------------------- > > > > > > SF.Net email is Sponsored by the Better Software Conference & EXPO > > > > > > September 19-22, 2005 * San Francisco, CA * Development Lifecycle > > > > > > Practices > > > > > > Agile & Plan-Driven Development * Managing Projects & Teams * > > Testing & QA > > > > > > Security * Process Improvement & Measurement * > > http://www.sqe.com/bsce5sf > > > > > > _______________________________________________ > > > > > > Wicket-user mailing list > > > > > > Wicket-user@lists.sourceforge.net > > > > > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ------------------------------------------------------- > > > > > SF.Net email is Sponsored by the Better Software Conference & EXPO > > > > > September 19-22, 2005 * San Francisco, CA * Development Lifecycle > > Practices > > > > > Agile & Plan-Driven Development * Managing Projects & Teams * > > Testing & QA > > > > > Security * Process Improvement & Measurement * > > http://www.sqe.com/bsce5sf > > > > > _______________________________________________ > > > > > Wicket-user mailing list > > > > > Wicket-user@lists.sourceforge.net > > > > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > > > > > > > > > > > > > ------------------------------------------------------- > > > > SF.Net email is Sponsored by the Better Software Conference & EXPO > > > > September 19-22, 2005 * San Francisco, CA * Development Lifecycle > > Practices > > > > Agile & Plan-Driven Development * Managing Projects & Teams * Testing > > & QA > > > > Security * Process Improvement & Measurement * > > http://www.sqe.com/bsce5sf > > > > _______________________________________________ > > > > Wicket-user mailing list > > > > Wicket-user@lists.sourceforge.net > > > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > > > > > > > > > ------------------------------------------------------- > > > SF.Net email is Sponsored by the Better Software Conference & EXPO > > > September 19-22, 2005 * San Francisco, CA * Development Lifecycle > > Practices > > > Agile & Plan-Driven Development * Managing Projects & Teams * Testing & > > QA > > > Security * Process Improvement & Measurement * > > http://www.sqe.com/bsce5sf > > > _______________________________________________ > > > Wicket-user mailing list > > > Wicket-user@lists.sourceforge.net > > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > > > > > ------------------------------------------------------- > > SF.Net email is sponsored by: > > Tame your development challenges with Apache's Geronimo App Server. > > Download > > it for free - -and be entered to win a 42" plasma tv or your very own > > Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php > > _______________________________________________ > > Wicket-user mailing list > > Wicket-user@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > > > > ------------------------------------------------------- > SF.Net email is sponsored by: > Tame your development challenges with Apache's Geronimo App Server. Download > it for free - -and be entered to win a 42" plasma tv or your very own > Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php > _______________________________________________ > Wicket-user mailing list > Wicket-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/wicket-user > ------------------------------------------------------- SF.Net email is sponsored by: Tame your development challenges with Apache's Geronimo App Server. Download it for free - -and be entered to win a 42" plasma tv or your very own Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php _______________________________________________ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user