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]

Reply via email to