2009/6/19 dflemstr <david.flemst...@gmail.com>

>
> Well, OK, I'm sorry everyone, I should have been more clear:
> The goal that I have is to make a snippet that creates a templated
> edit form for me. However, this is not the >issue< which I want to
> discuss. The issue is that when I try to make this snippet (and this
> could have been any snippet, since the principles are the same), I am
> unable to, because somewhere the instance of the Mapper for which I
> want to create the snippet (in this case it's a MetaMegaProtoUser)
> gets lost, and thus no changes are preserved.


I am very confused.  I don't understand what "gets lost" means?


> The reason why I
> mentioned the templating in the first place is because I basically use
> exactly the same code as in the default MetaMegaProtoUser.edit method,
> just adding some bind calls and an extra parameter: the template
> NodeSeq, and suddenly the code breaks.


A compiler error?  An exception? What kind of break do you mean?


> As mentioned before, any
> changes I make in the client aren't saved. I have no good way of
> checking whether the changes even are contained within the POST(→it's
> the localForm's fault) or if the User instance gets lost earlier
> (→it's some closure that fails somewhere), but the testEdit function
> gets called for sure, but with the wrong user instance.
>

I think the best thing to do with discuss in code.  I've created a simple
project at http://github.com/dpp/lift_1_1_sample/tree/master

Please fork the repository and enhance the code to edit the Dog object...
your code doesn't have to compile or run, but if I can see where you're
having problems, I can work to resolve them and to help you get over this
hump.  Point out where you're running into problems and I'll fix up the code
to work the way you want it to.

Thanks,

David


> Hopefully I've made my problem more clear.
>
> On Jun 19, 6:19 pm, David Pollak <feeder.of.the.be...@gmail.com>
> wrote:
> > On Fri, Jun 19, 2009 at 3:25 AM, dflemstr <david.flemst...@gmail.com>
> wrote:
> >
> > > Well, that probably is good advice, but doesn't really relate to the
> > > matter at hand if I understand you correctly.
> > > As you may notice, the code is a modified version of the embedded
> > > code, but it's completely independent from it (it doesn't override
> > > anything). It could have been code that had been written completely by
> > > me.
> >
> > > And anyways, my goal is to make a snippet out of the edit form, and
> > > not to just be able to load a template from a file (I need to put the
> > > whole edit form in multiple, obscure places) so your solution, I must
> > > say, isn't any help to me. Maybe my original message title was
> > > misleading.
> >
> > I am totally confused as to what your goal is?  Is it to put the form
> into a
> > template file (a .html) file?  Is it to control the rendering of the form
> > elements?  Is it something else?
> >
> > In terms of ProtoUser, that class is meant as a quick bootstrap to
> getting
> > your project going.  It lends itself nicely to adding fields.  Any
> styling
> > needs to be done via CSS.  If you need something more complex (like ESME
> > does), you can pull the code into your User class and then work to
> achieve
> > the particular goal.  If we can cycle a bit on what your particular goal
> is,
> > I'm sure we can get you there.
> >
> >
> >
> >
> >
> > > The issue is that the theUser object isn't preserved between requests.
> > > Apart from that, the snippet could've been any other snippet (because
> > > it's just being used as a generic mapper; I could've created this form
> > > for any structure).
> >
> > > Thank you for your effort, anyhow!
> >
> > > On Jun 19, 6:21 am, David Pollak <feeder.of.the.be...@gmail.com>
> > > wrote:
> > > > I'd suggest copying/pasting the code from ProtoUser and MegaProtoUser
> and
> > > > munging the code so that you don't have to work around the embedded
> > > > MegaProtoUser code.  Seehttp://
> > > svn.apache.org/viewvc/incubator/esme/trunk/server/src/main/sca...
> > > > I recently made this change to the
> >
> > > > On Thu, Jun 18, 2009 at 1:51 PM, dflemstr <david.flemst...@gmail.com
> >
> > > wrote:
> >
> > > > > Hello everyone,
> > > > > I'm having some problems with making the MetaMegaProtoUser "edit"
> > > > > method templateable (because I believe in the concept of separating
> > > > > content and design) and am succeeding quite well, except for with
> one
> > > > > little detail: I can't make my changes in the edit form persistent;
> it
> > > > > seems that the "User" instance gets lost somewhere in the process
> and
> > > > > that all the client-side changes therefore also get lost.
> >
> > > > > The code is at the end of the message. The edit method is called
> with
> > > > > a template which also is at the very end of the message.
> >
> > > > > I would really appreciate if anyone with more Lift experience than
> me
> > > > > could spot the mistake, because I simply cannot find it.
> >
> > >
> -------------------------------------------------------------------------------------------------
> > > > > The "snippet" (inside a subclass of MetaMegaProtoUser):
> >
> > > > >  /** Create an edit form with the specified template */
> > > > >  def edit(xhtml: NodeSeq) = {
> > > > >    val theUser: User = currentUser.open_! // we know we're logged
> in
> >
> > > > >    def testEdit() {
> > > > >      theUser.validate match {
> > > > >        case Nil =>
> > > > >          theUser.save
> > > > >          S.notice("Profile updated") //The Lift Core has a spelling
> > > > > mistake in its translation, so I don't use S.??
> > > > >          S.redirectTo(homePage)
> >
> > > > >        case xs =>
> > > > >          S.error(xs)
> > > > >          S.mapSnippet(S.currentSnippet.open_!, innerEdit)
> > > > >      }
> > > > >    }
> >
> > > > >    def innerEdit(t: NodeSeq) = bind("user", t,
> > > > >                                "field" -> ((h: NodeSeq) =>
> localForm
> > > > > (h, theUser, true)),
> > > > >                                "submit" ->
> SHtml.submit(S.??("edit"),
> > > > > testEdit _))
> > > > >    innerEdit(xhtml)
> > > > >  }
> >
> > > > >  /** Make a form with all the editable fields of an user, from a
> > > > > template */
> > > > >  protected def localForm(xhtml: NodeSeq, user: User,
> ignorePassword:
> > > > > Boolean): NodeSeq = {
> > > > >    signupFields
> > > > >      .map(fi => getSingleton.getActualBaseField(user, fi)) //get
> > > > > actual fields
> > > > >      .filter(f => !ignorePassword || (f match { //remove the
> password
> > > > > field
> > > > >        case f: MappedPassword[_] => false
> > > > >        case _ => true
> > > > >      }))
> > > > >      .flatMap(f =>
> > > > >          bind("field", xhtml,
> > > > >            "name" -> Text(f.displayName),
> > > > >            "form" -> f.toForm)
> > > > >        )
> > > > >  }
> >
> > >
> -------------------------------------------------------------------------------------------------
> > > > > The template:
> >
> > > > > <lift:surround with="default" at="content">
> > > > >    <lift:User.edit form="POST">
> > > > >        <table>
> > > > >            <tbody>
> > > > >                <user:field>
> > > > >                    <tr>
> > > > >                        <td><field:name/></td>
> > > > >                        <td><field:form/></td>
> > > > >                    </tr>
> > > > >                </user:field>
> > > > >            </tbody>
> > > > >            <tfoot>
> > > > >                <tr>
> > > > >                    <td>&nbsp;</td>
> > > > >                    <td><user:submit/></td>
> > > > >                </tr>
> > > > >            </tfoot>
> > > > >        </table>
> > > > >    </lift:User.edit>
> > > > > </lift:surround>
> >
> > > > --
> > > > Lift, the simply functional web frameworkhttp://liftweb.net
> > > > Beginning Scalahttp://www.apress.com/book/view/1430219890
> > > > Follow me:http://twitter.com/dpp
> > > > Git some:http://github.com/dpp
> >
> > --
> > Lift, the simply functional web frameworkhttp://liftweb.net
> > Beginning Scalahttp://www.apress.com/book/view/1430219890
> > Follow me:http://twitter.com/dpp
> > Git some:http://github.com/dpp
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Git some: http://github.com/dpp

--~--~---------~--~----~------------~-------~--~----~
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