Thanks guys, I knew I was missing something simple. So how do I then do I make it so I have the Role id at the end of the form submission process?
Thanks, Peter On Sep 4, 2:58 pm, Kris Nuttycombe <kris.nuttyco...@gmail.com> wrote: > While your "updated" list will be modified by the loadUsers closure, > the for comprehension will only be executed on the initial rendering > of the snippet, not as part of the execution of your loadUsers or > processUsers callbacks. So the state of the RequestVar will never be > reset. > > Kris > > On Fri, Sep 4, 2009 at 2:01 PM, Peter Robinett<pe...@bubblefoundry.com> wrote: > > > I'm trying to use a RequestVar to keep the Mapper model that I'm > > editing throughout the lifetime of a simple form. Specifically, I'm > > adding Users to a Role. The problem is, the RequestVar seems to get > > recreated at every step and, I must admit, it's driving me crazy and > > I'd appreciate some help. > > > Here's my snippet code: > > object currentRole extends RequestVar[Role](new Role) > > > def addUsers(xhtml: NodeSeq): NodeSeq = { > > val possible = User.findAll().map(user => (user.id.toString, > > user.name)) > > val current = role.users.map(user => user.id.toString) > > var updated: List[Long] = Nil > > > for { > > id <- S.param("id") > > num <- Full(id.toLong) > > e <- Role.find(By(Role.id, num)) > > } { > > println(currentRole) > > currentRole(e) > > println(currentRole) > > } > > > def loadUsers(ids: List[String]) = { > > updated = ids.map(_.toLong) > > } > > > def processUsers() = { > > println(updated) > > println(currentRole) > > } > > > bind("entry", xhtml, > > "users" -> SHtml.multiSelect(possible, current, loadUsers(_)), > > "submit" -> SHtml.submit("Update", processUsers) > > ) > > } > > > And the template: > > <lift:surround with="default" at="content"> > > <lift:ManageRoles.addUsers form="POST"> > > <entry:users /> > > <entry:submit /> > > </lift:ManageRoles.addUsers> > > </lift:surround> > > > And my STDOUT: > > com.equalnetworks.model.Role={Parent > > Role:=NULL,datacenter=NULL,Name:=,id=-1,Delete:=false,Update:=false,Create:=false,Read:=false} > > com.equalnetworks.model.Role={Parent > > Role:=NULL,datacenter=NULL,Name:=Customers,id=2,Delete:=false,Update:=false,Create:=false,Read:=false} > > INFO - Service request (GET) /roles/memberships/ took 87 Milliseconds > > INFO - Service request (GET) /classpath/jquery.js took 7 Milliseconds > > INFO - Service request (GET) /images/ajax-loader.gif took 6 > > Milliseconds > > List(1, 2) > > com.equalnetworks.model.Role={Parent > > Role:=NULL,datacenter=NULL,Name:=,id=-1,Delete:=false,Update:=false,Create:=false,Read:=false} > > > As you can see, I'm using a for comprehension to take a request > > parameter (e.g. /roles/memerships/?id=2) and get a Role, which I then > > successfully assign to my currentRole RequestVar (see how id is first > > -1 and then 2). Unfortunately once I submit the form processUsers is > > called and currentRole again has an id of -1. Why is this? > > > Thanks in advance, > > Peter Robinett --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---