[Lift] Re: How to handle refresh with S.redirectTo with state?
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? 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 --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Re: How to handle refresh with S.redirectTo with state?
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
[Lift] Re: How to handle refresh with S.redirectTo with state?
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 --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Re: How to handle refresh with S.redirectTo with state?
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 --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Re: How to handle refresh with S.redirectTo with state?
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 --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---