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

Reply via email to