Generally you can either use RequestVars or a StatefulSnippet class to keep
the values around on form resubmission. If you're using a Mapper class, you
really just need one RequestVar to hold your Mapper instance. For example,
if I had a Mapper class for a person with first name, last name and email, I
could do something like this in my snippet class:

...
  // Set the up the RequstVar to initialize a new MyUserClass by default
  object userVar extends RequestVar[MyUserClass](MyUserClass.create)

  def editMyUser (xhtml : NodeSeq) : NodeSeq = {
    // We define a val to capture the current value of the userVar. This
will be used to reinject later, as well
    // as for current access
    val current = userVar.is
    ...
    def saveMyUser () {
      current.validate match { ...
        ...
        current.save
      }
    }

    bind("user", xhtml,
           // First we re-inject the current MyUserClass instance using a
hidden field
           "current" -> SHtml.hidden(() => userVar(current))
           // normal fields follow, e.g.
           "name" -> SHtml.text(current.name.is, current.name(_))
           // alternatively, you could do both steps in the first form
field:
           "name" -> SHtml.text(current.name.is, { in => userVar(current);
current.name(in) })
           ...
    )
  }
...

Let me know if you have any questions on that.

Derek


On Fri, Jun 5, 2009 at 9:47 PM, g-man <gregor...@gmail.com> wrote:

>
> I now have the due date arriving OK from the jQuery datepicker, and I
> cobbled together some ugliness to give days left until the ToDo due
> date, so that is good.
>
> My problem now is since we are not using the 'magic' of the _toForm
> methods for the form elements, I have to set each var value for the
> model field from the input SHtml data, as was done in the PocketChange
> app AddEntry.scala file.
>
> What is happening is that the initialization for each var is resetting
> the form if validation fails, so I guess I need to institute some
> RequestVars to remember the form values for resubmission, right?
>
> All my questions will take take the form of 'how to' recipes of
> foundational webapp elements, as you can see. My plan is to develop
> them for a 'cookbook' section of the wiki, so that's why I am asking
> one simple conceptual thing at a time.
>
> Therefore, what I have to learn now is all about form binding and
> recalling form value state if validation fails, so please break that
> down for me.
>
> Thanks as always!
>
>
> On Jun 3, 10:25 pm, Derek Chen-Becker <dchenbec...@gmail.com> wrote:
> > Box is the base class. What you want is Full("2").
> >
> > Derek
> >
> > On Wed, Jun 3, 2009 at 8:53 PM, g-man <gregor...@gmail.com> wrote:
> >
> > > Very good!
> >
> > > I did a little homework, rearranged some things, and am getting some
> > > nice results with the 'manual method'...
> >
> > > Since I am following the PocketChange app now rather than the ToDo
> > > example, there is no 'todo' val in scope to bind, so the
> > > todo.priority.toForm method will not work.
> >
> > > I have SHtml.select working with a mapping for my choices, and I can
> > > use Empty for my default, but how do I get a Box["2"] as my default?
> >
> > > On Jun 3, 7:21 am, Derek Chen-Becker <dchenbec...@gmail.com> wrote:
> > > > The only issue I would mention is that there's currently an open
> ticket
> > > > because MappedDateTime won't save the time portion when you use
> Derby. I
> > > > haven't had time to triage this yet.
> >
> > > > Derek
> >
> > > > On Wed, Jun 3, 2009 at 3:01 AM, Timothy Perrett
> <timo...@getintheloop.eu
> > > >wrote:
> >
> > > > > Greg,
> >
> > > > > I dont really use toForm; have you explored "doing it manually"? It
> > > > > seems like that would be able to tell you if there is a problem
> with
> > > > > toForm on MappedDateTime.
> >
> > > > > I use mapped date time quite a bit and have no problems at all
> > > > > persisting the dates :-)
> >
> > > > > Cheers, Tim
> >
> > > > > On Jun 3, 3:09 am, g-man <gregor...@gmail.com> wrote:
> > > > > > Are there no ideas for my problem?
> >
> > > > > > I have many more questions saved up, but would like to clear each
> out
> > > > > > before starting a new one.
> >
> > > > > > Thanks again!
> >
> > > > > > On May 31, 1:57 pm, g-man <gregor...@gmail.com> wrote:
> >
> > > > > > > As I proceed to enhance the ToDo example, I have added a new
> field
> > > to
> > > > > > > the ToDo.scala model:
> >
> > > > > > > object dueOn extends MappedDateTime(this) {
> > > > > > >     final val dateFormat = DateFormat.getDateInstance
> > > > > > > (DateFormat.SHORT)
> > > > > > >     override def asHtml = Text(dateFormat.format(is))}
> >
> > > > > > > Next, I added a binding in the TD.scala snippet within the add
> > > method
> > > > > > > of the TD class:
> >
> > > > > > > def doBind(form: NodeSeq) = {
> > > > > > >       bind("todo", form,  "desc" -> todo.desc.toForm,
> > > > > > >                           "priority" -> todo.priority.toForm,
> > > > > > >                           "dueOn" -> todo.dueOn.toForm,
> > > > > > >                           "submit" -> submit("create new Task",
> > > > > > > checkAndSave)}
> >
> > > > > > > Then, the todo.html template gets a bind point:
> >
> > > > > > > <lift:TD.add form="post">
> > > > > > >       ...
> > > > > > >       <todo:dueOn/>
> > > > > > >       <todo:submit><button/></todo:submit>
> > > > > > >     </lift:TD.add>
> >
> > > > > > > When I check the database, the record does save, and all the
> other
> > > > > > > fields are OK, but the date itself is <null>.
> >
> > > > > > > Somehow, it seems the text of the input field is not getting
> > > changed
> > > > > > > into a Date object for the database to handle, right?
> >
> > > > > > > When I look at the PocketChange app from the book, everything
> is
> > > done
> > > > > > > completely differently from the ToDo example (no use of
> _toForm,
> > > for
> > > > > > > instance).
> >
> > > > > > > I know dates and times are convoluted in Java, so what am I
> > > missing?
> >
> > > > > > > Thanks!
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to