[Lift] Re: How to handle refresh with S.redirectTo with state?

2009-05-05 Thread Bryan.

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?

2009-05-05 Thread David Pollak
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?

2009-05-04 Thread marius d.

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?

2009-05-03 Thread Bryan.

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?

2009-05-03 Thread Bryan.

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