Oh now I see, that is really awesome -- I didn't realize that it properly kept tab/window separation, and now it makes more sense. Of course, that means that if I want my logic to properly maintain the separation I'll need to somehow tie into that separation, which seems to make that RequestVar / injection path you mentioned more reasonable.
I'll stick with a SessionVar for the moment as I'm just prototyping, and think about the RequestVar thing for later. Thanks much for the exposition. -Ross On Jul 14, 2009, at 3:19 PM, David Pollak wrote: > > > On Tue, Jul 14, 2009 at 11:23 AM, Ross Mellgren <[email protected]> > wrote: > The RequestVar sounds a bit more fun, but I'd rather not take your > time -- I'm sure if the SessionVar becomes onerous I can toy with > that. I have some concerns about stability of the image URLs, > actually, so using a SessionVar with some stable names seems like a > better idea. > > I'm interested in learning how the state works in detail in lift > though, so do you mind explaining why there might be multiple > instances? I assumed that (session, snippet class) was one-to-one > with snippet instances? > > Open two browser tabs and in each tab browse to: > http://demo.liftweb.net/arc > > In the first browser tab, enter "first" and in the second enter > "second". Click the submit button on each. > > You'll see that the state of each browser tab is separate. > > If you do a view source and look at the form... there's a hidden > field in the form. > > What's happening under the covers is that the hidden field maps to a > function on the server. The function tells the current Lift session > that if, during the processing of the current request, Lift finds a > snippet named whatever the name of the stateful snippet is named, > don't create a new instance, but use the instance that the function > holds. In this way, the snippet maintains state because it's the > same instance (with the same instance variables, etc.) > > But if you have two different browser windows, each has instantiated > a new stateful snippet and each of the hidden fields maps to a > different function that associates different instances of the > stateful snippet with the snippet name. > > -Ross > > On Jul 14, 2009, at 2:18 PM, David Pollak wrote: > >> >> >> On Tue, Jul 14, 2009 at 10:50 AM, Ross Mellgren <[email protected]> >> wrote: >> darn, I was hoping I could just get away with letting Lift manage >> the session by virtue of managing the session snippet. >> >> There may be multiple stateful snippet instances for a given >> stateful snippet within the system. Figuring out which is which is >> a non-trivial task for your image serving URL. >> >> If you really, really don't like the SessionVar idea, you can bind >> a function to your /image request and that function can deposit a >> reference to the current stateful snippet into a RequestVar that >> can be accessed during the image serving process. If you like that >> answer better, give me a few days to whip up an example. >> >> >> Thanks for the advice. >> >> -Ross >> >> On Jul 13, 2009, at 6:38 PM, David Pollak wrote: >> >>> >>> >>> On Mon, Jul 13, 2009 at 3:21 PM, Ross Mellgren <[email protected]> >>> wrote: >>> >>> Hi all, >>> >>> Is there any way to get a StatefulSnippet instance for a particular >>> class in the current session? It looks like there's machinery in S, >>> LiftRules, and LiftSession to get these but they're all marked >>> private[http]. >>> >>> I'm still getting used to Lift, so I could very well be approaching >>> this the wrong way (using a custom dispatch) -- I have a snippet >>> which >>> manages an image editing workflow. I'd like to create a dispatch >>> which >>> serves up the current version of the image(s) to the user, so I need >>> to dump back a raw response without any template processing. >>> >>> I could stuff the current image(s) in a SessionVar or perhaps use an >>> injector and RequestVar, perhaps? >>> >>> Your best bet is to use a SessionVar. Put the image or a pointer >>> to how to get the image in a SessionVar. >>> >>> >>> -Ross >>> >>> >>> >>> >>> >>> >>> -- >>> 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 >>> >>> >>> >> >> >> >> >> >> >> -- >> 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 >> >> >> > > > > > > > -- > 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 [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~----------~----~----~----~------~----~------~--~---
