Generally, what you want to do is replace setupRender() with onPrepareFromForm().
void onPrepareFromForm() { if (_myObject == null) _myObject = new MyObject(); } "Prepare" means the prepare event, fired from your Form component. Prepare event is triggered when the form starts to render AND when it starts to process a submission. Instantiating and object is exactly what prepare is intended for. Tapestry will supply an id of "form" for the <t:form> component. If you have multiple forms, they may end up being "form", "form_0", "form_1". I tend to give an explicit id. You test page is a little different, in that it displays the contents of the myObject property as well, so your setupRender() should do the job (because the _myObject field is persistent). On Nov 15, 2007 11:39 AM, Josh Canfield <[EMAIL PROTECTED]> wrote: > Hey Michael, > > I didn't get to it last night, but here you go, a very simple example: > > ****** Start.tml **** > <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> > <head> > <title>Form Test</title> > </head> > <body> > MyObject:<br/> > Name: ${myObject.name}<br/> > Number: ${myObject.number}<br/> > <t:form t:id="myForm"> > <t:errors/> > <t:label t:for="name"/> <input t:type="textfield" t:id="name" t:value= > "myObject.name"/><br/> > <t:label t:for="number"/> <input t:type="textfield" t:id="number" > t:value="myObject.number"/><br/> > <input type="submit"/> > </t:form> > </body> > </html> > > **** Start.java **** > *package* joshcan.test.myapp.pages; > ** > *import* joshcan.test.myapp.model.TestObject; > *import* org.apache.tapestry.annotations.Persist; > > /** > * Start page of application myapp. > */ > *public* *class* Start > { > @Persist // Store this object in the session... > * private* TestObject _myObject; > * * > * public* *void* setupRender() { > * if* ( _myObject == *null* ) { // make sure we have an object to work > on. > _myObject = *new* TestObject(); > } > } > > * public* TestObject getMyObject() { > * return* _myObject; > } > > * public* *void* setMyObject(TestObject myObject) { > _myObject = myObject; > } > } > **** TestObject.java **** > * > > package* joshcan.test.myapp.model; > > *public* *class* TestObject { > > * private* String name; > * private* Long number; > > * public* String getName() { > * return* name; > } > > * public* *void* setName(String name) { > * this*.name = name; > } > > * public* Long getNumber() { > *return* number; > } > > * public* *void* setNumber(Long number) { > * this*.number = number; > } > > } > Josh > > > > On Nov 15, 2007 1:35 AM, Michael Courcy <[EMAIL PROTECTED]> wrote: > > > > > > > The title property of the video object is updated, I don't have a title > > > property on my page class. > > > > > > I can't compile anything right now, but I'll try to put together a small > > > example tonight, if someone else hasn't posted something by then. > > > > > > Josh > > Josh It would be really really nice !!! > > If you do so I would make it a small wiki tutorial > > > > > > Josh Canfield a écrit : > > > Hi Michael, > > > > > > > > > > > >> Thanks Josh, but do you have also a title property with getter and > > >> setter in your page class ? > > >> > > >> > > > > > > No, I only have the video getter/setter > > > > > > > > > > > >> And if yes (as I guess) whish value is updated when you submit the form > > >> : MyPage.title or MyPage.video.title ? > > >> > > > > > > > > > The title property of the video object is updated, I don't have a title > > > property on my page class. > > > > > > I can't compile anything right now, but I'll try to put together a small > > > example tonight, if someone else hasn't posted something by then. > > > > > > Josh > > > > > > On Nov 14, 2007 11:01 AM, Michael Courcy <[EMAIL PROTECTED]> > > wrote: > > > > > > > > >> Thanks Josh, but do you have also a title property with getter and > > >> setter in your page class ? > > >> > > >> And if yes (as I guess) whish value is updated when you submit the form > > >> : MyPage.title or MyPage.video.title ? > > >> > > >> Josh Canfield a écrit : > > >> >> I want to populate from the form directly to the bean. But this > > >> require > > >> > > >>>> to use either the beanEditForm or a custom component. > > >>>> > > >>>> > > >>>> > > >>> You can get this to work. I use the textfield component for editing my > > >>> > > >> bean > > >> > > >>> objects. This is from a working emplate: > > >>> <input t:id="*title*" t:type="*textfield*" t:size="*40*" t:value="* > > >>> video.title*" t:validate="*required*" type="*text*" /> > > >>> > > >>> My page class has a getVideo method which returns an object that has a > > >>> getTitle method. > > >>> > > >>> Good luck, > > >>> Josh > > >>> > > >>> On Nov 14, 2007 9:05 AM, Michael Courcy <[EMAIL PROTECTED]> > > >>> > > >> wrote: > > >> > > >>> > > >>>> You're right > > >>>> > > >>>> here it is, I remove the "offending input" > > >>>> > > >>>> and use this instead > > >>>> > > >>>> ${user}-- ${user.name} > > >>>> > > >>>> And I get > > >>>> > > >>>> [EMAIL PROTECTED] -- A name > > >>>> > > >>>> Obviously user is not null. > > >>>> > > >>>> I think the problem does not come from tapestry but from me. > > >>>> I want to populate from the form directly to the bean. But this > > require > > >>>> to use either the beanEditForm or a custom component. > > >>>> > > >>>> I 'm just influenced by other framework like struts2 for instance : > > >>>> > > >>>> If you have something like that in your form > > >>>> > > >>>> <input name="user.name" value="bla" /> > > >>>> > > >>>> When the form is submitted struts2 tries to find if the controller > > >>>> features a user property, and then if user features a name property > > >>>> If the answer is yes to both it calls controller.getUser > > >>>> > > >> ().setName("bla"); > > >> > > >>>> > > >>>> > > >>>> > > >>>> Ezra Epstein a écrit : > > >>>> > I always pause when hearing "100% sure." An easy check/test is to > > >>>> remove the offending <input> and stick in a simple ${user} and see if > > >>>> > > >> indeed > > >> > > >>>> you get the toString() value for your user object. > > >>>> > > >>>> > > >>>>> Michael Courcy <[EMAIL PROTECTED]> wrote: I'm 100% sure, user > > >>>>> > > >> is > > >> > > >>>> not null > > >>>> > > >>>> > > >>>>> I have a getter and a setter for both : name and user > > >>>>> > > >>>>> Thanks > > >>>>> Thiago H de Paula Figueiredo a écrit : > > >>>>> > > >>>>> > > >>>>> > > >>>>>> On Wed, 14 Nov 2007 12:47:06 -0200, Michael Courcy > > >>>>>> wrote: > > >>>>>> > > >>>>>> > > >>>>>> > > >>>>>> > > >>>>>>> [input] > > >>>>>>> > > >>>>>>> I have to provide the setter and the getter for name and I still > > get > > >>>>>>> an error when I submit. > > >>>>>>> > > >>>>>>> > > >>>>>>> > > >>>>>> What error? Make sure your user field is not null when the form is > > >>>>>> submited. Also make sure you have public getters and setters, > > because > > >>>>>> otherwise Tapestry cannot access them. > > >>>>>> > > >>>>>> > > >>>>>> > > >>>>>> > > >>>>> > > >>>> -- > > >>>> Michael Courcy > > >>>> http://courcy.blogspot.com > > >>>> > > >>>> > > >>>> > > >>>> > > >>> > > >>> > > >> -- > > >> Michael Courcy > > >> http://courcy.blogspot.com > > >> > > >> > > >> > > > > > > > > > > > > > > > -- > > Michael Courcy > > http://courcy.blogspot.com > > > > > > > > -- > -- > TheDailyTube.com. Sign up and get the best new videos on the internet > delivered fresh to your inbox. > -- Howard M. Lewis Ship Partner and Senior Architect at Feature50 Creator Apache Tapestry and Apache HiveMind --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]