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

Reply via email to