On Tue, May 5, 2009 at 7:20 AM, Bryan. <germ...@gmail.com> wrote: > > Thanks for the reply, Marius. > > I just saw your reply and am not sure I fully grasp how this is safe. > What if request A comes in and sets com.bryan.myproject.locationQuery > and starts working on processing the rest of the request. In the > meantime, request B comes in and sets > com.bryan.myproject.locationQuery. Now request A finishes processing > the request, upon which it has to read in > com.bryan.myproject.locationQuery. Wouldn't request A now be reading > in com.bryan.myproject.locationQuery set by request B? > > Or have I mistaken how objects work and how requests are handled in > lift?
RequestVars are proxies to backing-store that is request specific. The place that RequestVar data is stored is in a hashmap that's associated with the current thread and current request. There's no way for the contents of a RequestVar to bleed through to another thread or another request. > > Thanks, > Bryan > > On May 4, 2:24 am, "marius d." <marius.dan...@gmail.com> wrote: > > Not at all. They are safe. > > > > On May 3, 9:49 pm, "Bryan." <germ...@gmail.com> wrote: > > > > > Would that mean that the state of the RequestVar could accidentally be > > > shared with multiple requests? > > > > > On May 3, 1:51 pm, "marius d." <marius.dan...@gmail.com> wrote: > > > > > > Hmmm ... the code seems to be fine (as far as I can tell from the > code > > > > snippet) > > > > > > Can you perhaps declare your RequestVars outside of Cars scope? > > > > > > just > > > > > > object locationQuery extends RequestVar[Box[LocationQuery]](Empty) > > > > > > class Cars { > > > > ... > > > > > > } > > > > > > .. personally I would avoid using open_! unless I'm really sure that > > > > the Box is not Empty. > > > > > > Br's, > > > > Marius > > > > > > On May 3, 7:08 pm, "Bryan." <germ...@gmail.com> wrote: > > > > > > > I believe I am doing #1 now with no luck. Let me know if this is > > > > > correct: > > > > > > > class Cars { > > > > > // ... > > > > > object locationQuery extends > RequestVar[Box[LocationQuery]](Empty) > > > > > > > def search(xhtml: NodeSeq): NodeSeq = { > > > > > def processSearch() = { > > > > > // ... > > > > > val lq = new LocationQuery(validPickupDate.open_!, > > > > > validDropoffDate.open_!, city, city) > > > > > S.redirectTo("/select", () => { locationQuery(Full(lq)); > > > > > requestReference(Full(requestRef)) }) > > > > > } > > > > > > > // binds are here > > > > > } > > > > > > > def selectedLocation(xhtml: NodeSeq): NodeSeq = { > > > > > if (locationQuery.isDefined) { > > > > > val selectedCity = locationQuery.open_!.pickupLocation > > > > > Text(selectedCity.name + ", " + selectedCity.region) > > > > > } else { > > > > > Text("") > > > > > } > > > > > } > > > > > > > // ... > > > > > > > } > > > > > > > Thanks, > > > > > Bryan > > > > > > > On May 3, 11:46 am, "marius d." <marius.dan...@gmail.com> wrote: > > > > > > > > Oh.. 1 & 2 are unrelated ... just slightly different approaches. > > > > > > > > On May 3, 6:45 pm, "marius d." <marius.dan...@gmail.com> wrote: > > > > > > > > > Well instead of open_1 use openOr so that you wont get > exceptions when > > > > > > > the Box is Empty. Also if you want when you to the redirect you > could > > > > > > > propagate those RequestsVars as well so that your browser > re-send > > > > > > > them. Now sure if this is what you'd want but should help > avoiding > > > > > > > Empty request vars. But what I'd do is: > > > > > > > > > 1. Since you are doing redirect with state in the function > passed to > > > > > > > S.redirectTo you can set relevant values to your RequestVar's > .. hence > > > > > > > when your page is rendered your request vars have the old > values > > > > > > > potentially. > > > > > > > 2. Use a StatefulSnippet and call redirectTo from the > StatefulSnippet > > > > > > > not S. Hence you can save state inside your snippet and when > redirect > > > > > > > happens, the same snippet instance would be used. > > > > > > > > > Br's, > > > > > > > Marius > > > > > > > > > On May 3, 6:08 pm, Bryan <germ...@gmail.com> wrote: > > > > > > > > > > I have a snippet that calls S.redirectTo with state. In this > same > > > > > > > > snippet class I have a few functions to show the values of > the > > > > > > > > processed RequestVar's. This works fine until I refresh the > page, > > > > > > > > because in these functions I call .open_! on some now Empty > > > > > > > > RequestVar's. It is simple enough to show Text("") when the > box is > > > > > > > > not Full, but now I have a problem with the page not showing > useful > > > > > > > > data. > > > > > > > > > > What are some suggestions for handling this? Should I just > add code > > > > > > > > to each of my many snippet functions to redirect to "/" when > the > > > > > > > > RequestVar's are empty? > > > > > > > > > > Thanks, > > > > > > > > Bryan > > > > -- 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 -~----------~----~----~----~------~----~------~--~---