Is that because there is a reference still in the scope of the function?

: <cfset var cart = beans.UserSession.getCurrentCart()>

On Tue, Oct 30, 2012 at 10:53 AM, Jeff P <[email protected]> wrote:

> At the top of the function that processes the order and clears the cart I
> have:
>
> <cfset var cart = beans.UserSession.getCurrentCart()>
> <cfset var theSession = beans.UserSession.getSession()>
>
> Right after the <cfset beans.UserSession.clearCartSession()> if I put in a
>
> <cfthrow message="#StructKeyExists(beans.UserSession.cart)#"> returns a
> "No"
>
> but
>
> <cfthrow message="#isStruct(cart)#"> returns a "Yes"  and the item in the
> cart is still there, it's not a freshly initialized cart.
>
> Thanks, Jeff
>
>
> On Tuesday, October 30, 2012 10:02:23 AM UTC-4, Dan Wilson -
> [email protected] wrote:
>
>> What happens when you put a cfdump right after the cart clearing
>> operation?
>>
>> DW
>>
>>
>> On Tue, Oct 30, 2012 at 9:56 AM, Jeff P <[email protected]> wrote:
>>
>>> The sessionid remains correct and separate between the two browsers. The
>>> product in the cart is also correct for the user's session. This has also
>>> helped verify that the cart that shows up after the order is complete is
>>> not a freshly initialized cart but the same cart from the order (or a copy
>>> as you stated earlier)
>>>
>>> Jeff
>>>
>>>
>>> On Monday, October 29, 2012 7:48:15 PM UTC-4, Jared Rypka-Hauer wrote:
>>>
>>>> Try something once.
>>>>
>>>> Use two different browsers and create 2 different sessions with
>>>> different products in the cart so you can differentiate them.
>>>>
>>>> The process one cart and see if the symptom still exists and if it
>>>> does, check to see which product is in the cart, the one that should be
>>>> there or the one from the other session...
>>>>
>>>> Just a thought...
>>>>
>>>> J
>>>>
>>>> Then run your test and make sure that the cart you see in the dump is
>>>> the cart that actually belongs to the user in question.
>>>> On Oct 29, 2012, at 1:24 PM, Jeff P <[email protected]> wrote:
>>>>
>>>> Here are the parts in pastebin
>>>>
>>>> Controller http://pastebin.**com**/q9sg4u3a<http://pastebin.com/q9sg4u3a>
>>>>
>>>> UserSession http://pastebin.**co**m/5mDTu7dS<http://pastebin.com/5mDTu7dS>
>>>>
>>>> OrderController 
>>>> http://**pastebi**n.com/GdDejK0E<http://pastebin.com/GdDejK0E>
>>>>
>>>> Template http://pastebin.com/**0**MDbxPJg<http://pastebin.com/0MDbxPJg>
>>>>
>>>> On Monday, October 29, 2012 1:59:47 PM UTC-4, Jeff P wrote:
>>>>>
>>>>> <cfset event.copyToScope( variables, "currentUser, currentCart,
>>>>> userSession")>
>>>>> <cfset me = variables.currentUser>
>>>>> <cfset cart = variables.currentCart>
>>>>>
>>>>> <cfdump var="#userSession#"> shows the cart isn't in the session
>>>>>
>>>>> <cfdump var="#currentCart#" label="currentCart"> which comes from the
>>>>> session as well, returns the object.
>>>>>
>>>>> I will give the direct calls a try. I had thought about always having
>>>>> the cart exist but hadn't worked towards it yet.
>>>>>
>>>>> Thanks also for reminding me about pastebin.
>>>>>
>>>>> Jeff
>>>>>
>>>>> On Monday, October 29, 2012 1:45:00 PM UTC-4, Jared Rypka-Hauer wrote:
>>>>>>
>>>>>> Can you show the code you're using to get the cart from the event
>>>>>> into the page's variables scope? It's possible that there's a 
>>>>>> structCopy()
>>>>>> involved rather than a simple assignment.
>>>>>>
>>>>>> The difference is that doing a structCopy() would cause a separate
>>>>>> instance of session.cart to be set to the event object and/or the 
>>>>>> variables
>>>>>> scope of your template. If that's the case then the behavior you're 
>>>>>> seeing
>>>>>> makes perfect sense. If this is the case, the byRef nature of structs 
>>>>>> that
>>>>>> you're depending on isn't going to work because you have a discrete COPY 
>>>>>> of
>>>>>> the objects in the event object and variables scope. For some reason this
>>>>>> is ringing a bell in the back of my mind as far as MG's functionality and
>>>>>> unexpected behaviors.
>>>>>>
>>>>>> You may be right, I may be crazy. But I just might be the lunatic
>>>>>> you're looking for. Give it a try, see what happens. :)
>>>>>>
>>>>>> Just for shits and giggles, you could also try replacing your
>>>>>> function calls with direct references to the relevant variable. I know it
>>>>>> breaks encapsulation, but I'm not suggesting you do it for your 
>>>>>> production
>>>>>> code, just remark out your calls to UserSession and CurrentCart and 
>>>>>> replace
>>>>>> them with direct references to the variables. That will eliminate your
>>>>>> machinery from the equation and tell you if you have a bug in your code 
>>>>>> or
>>>>>> if there's something deeper going on.
>>>>>>
>>>>>> You could also try setting session.cart to "" rather than using
>>>>>> structDelete(). Replace structKeyExists() with isStruct() and just have
>>>>>> session.cart always exist...
>>>>>>
>>>>>> Man it's been a long time since I've responded to a community support
>>>>>> request like this... feels good!
>>>>>>
>>>>>> Let us know what you find out!
>>>>>>
>>>>>> J
>>>>>>
>>>>>> PS - If you really want help with this you might be best off to post
>>>>>> the code to the template in question, both controllers, your UserSession
>>>>>> and your Cart to something like pastebin.com or nomorepasting.comand 
>>>>>> send us links to them all so we can see the whole codebase in a format
>>>>>> that's familiar and easily readable. Both of those resources provide
>>>>>> ColdFusion code support so they will color code highlight things 
>>>>>> correctly.
>>>>>>
>>>>>> http://pastebin.com
>>>>>> http://www.nomorepasting.com/**p**aste.php<http://www.nomorepasting.com/paste.php>
>>>>>>
>>>>>>
>>>>>> On Oct 29, 2012, at 12:26 PM, Jeff P <[email protected]> wrote:
>>>>>>
>>>>>> This is in a controller called OrderController Here is the code:
>>>>>>
>>>>>> <cffunction name="processOrder" access="public" returntype="void"
>>>>>> output="false">
>>>>>> <cfargument name="event" type="any">
>>>>>>
>>>>>>         <!--- get the cart data --->
>>>>>> <cfset var cart = beans.UserSession.**getCurrentCa**rt()>
>>>>>>
>>>>>>         <cfif returnCode eq "Y">
>>>>>>      <!--- if payment is successful, --->
>>>>>>       <!--- clear database tables for the cart --->
>>>>>>       <cfset beans.cartService.**removeCartFr**omDatabase(cart)>
>>>>>>       <!--- clear the cart session --->
>>>>>>       <cfset beans.UserSession.**clearCartSes**sion()>
>>>>>>      <cfset beans.UserSession.**clearCheckou**t()>
>>>>>>       <!--- delete the credit card temp stuff --->
>>>>>>      <cfset beans.OrderService.**deleteCredi**tCardData(myOrder)>
>>>>>>       <cfset arguments.event.setValue("**publ**icOrderNumber",
>>>>>> myOrder.getPublicOrderNumber()****)>
>>>>>>       <cfset arguments.event.addResult("**pay**mentAccepted")>
>>>>>>  <cfelse>
>>>>>>             .....
>>>>>>          </cfif>
>>>>>>
>>>>>> The code to clear the cart session and checkout in the UserSession
>>>>>> cfc are:
>>>>>>
>>>>>> <cffunction name="clearCartSession" access="public" output="false">
>>>>>>  <cflock timeout="3" type="exclusive" scope="session">
>>>>>> <cfset structDelete( session, "cart" )>
>>>>>>  </cflock>
>>>>>> </cffunction>
>>>>>> <cffunction name="clearCheckout" access="public" output="false">
>>>>>>  <cflock timeout="3" type="exclusive" scope="session">
>>>>>> <cfset structDelete( session, "checkout" )>
>>>>>>  </cflock>
>>>>>> </cffunction>
>>>>>>
>>>>>> Thank you Dan.
>>>>>>
>>>>>> On Monday, October 29, 2012 11:02:52 AM UTC-4, Dan Wilson -
>>>>>> [email protected] wrote:
>>>>>>>
>>>>>>> Show the portion of code where you delete the cart after a
>>>>>>> successful transaction.
>>>>>>>
>>>>>>> DW
>>>>>>> On Oct 29, 2012 10:41 AM, "Jeff P" <[email protected]> wrote:
>>>>>>>
>>>>>>>> Hey everybody,
>>>>>>>>
>>>>>>>> I'm experiencing so strangeness with sessions and am hoping you
>>>>>>>> folks could shed some light on on what's happening. I have a cart app 
>>>>>>>> in MG
>>>>>>>> 3.1.299. When I complete an order and delete the cart from the session 
>>>>>>>> and
>>>>>>>> show the order complete page a dump of the session shows the cart is no
>>>>>>>> longer in the session scope. However, another call to the session on 
>>>>>>>> the
>>>>>>>> same page shows the cart as a valid struct within the session.
>>>>>>>>
>>>>>>>> In my Controller.cfc I have an onRequestStart function that copies
>>>>>>>> the cart and the user (if they exist) to the event scope. I also have 
>>>>>>>> it
>>>>>>>> copying the entire session through the UserSession.cfc to try to figure
>>>>>>>> this out. Here are the pertinent parts of my controller.cfc and
>>>>>>>> userSession.cfc:
>>>>>>>>
>>>>>>>> *Controller.cfc*
>>>>>>>>
>>>>>>>>          <cffunction name="onRequestStart" access="public"
>>>>>>>> output="false">
>>>>>>>> <cfargument name="event" type="any">
>>>>>>>>  <!--- copy the cart to the event scope if it exists. --->
>>>>>>>> <cfif beans.UserSession.cartExists()****>
>>>>>>>>  <cfset arguments.event.setValue("**curr**entCart",
>>>>>>>> beans.UserSession.**getCurrentCa**rt())>
>>>>>>>> </cfif>
>>>>>>>>  <!--- and for the user if they're logged in. --->
>>>>>>>> <cfif beans.UserSession.loggedIn()>
>>>>>>>>  <cfset arguments.event.setValue("**curr**entUser",
>>>>>>>> beans.UserSession.**getCurrentUs**er())>
>>>>>>>> </cfif>
>>>>>>>>  <!--- return the whole session for some testing --->
>>>>>>>> <cfset arguments.event.setValue("**user**Session",
>>>>>>>> beans.UserSession.getSession()****)>
>>>>>>>>  </cffunction>
>>>>>>>>
>>>>>>>> *UserSession.cfc*
>>>>>>>>
>>>>>>>>         <cffunction name="cartExists" access="public"
>>>>>>>> output="false">
>>>>>>>>  <cflock timeout="3" type="readonly" scope="session">
>>>>>>>> <cfreturn structKeyExists( session, "cart" )>
>>>>>>>>  </cflock>
>>>>>>>> </cffunction>
>>>>>>>>
>>>>>>>>         <cffunction name="getCurrentCart" access="public"
>>>>>>>> output="false">
>>>>>>>>  <cflock timeout="3" type="readonly" scope="session">
>>>>>>>> <cfreturn session.cart>
>>>>>>>>  </cflock>
>>>>>>>> </cffunction>
>>>>>>>>  <cffunction name="getCurrentUser" access="public" output="false">
>>>>>>>>  <cflock timeout="3" type="readonly" scope="session">
>>>>>>>> <cfreturn session.user>
>>>>>>>>  </cflock>
>>>>>>>> </cffunction>
>>>>>>>>  <cffunction name="getSession" access="public" output="false">
>>>>>>>>  <cflock timeout="3" type="readonly" scope="session">
>>>>>>>> <cfreturn session>
>>>>>>>>  </cflock>
>>>>>>>> </cffunction>
>>>>>>>>
>>>>>>>>         <cffunction name="loggedIn" access="public" output="false">
>>>>>>>>  <cflock timeout="3" type="readonly" scope="session">
>>>>>>>> <cfreturn structKeyExists( session, "user" )>
>>>>>>>>  </cflock>
>>>>>>>> </cffunction>
>>>>>>>>
>>>>>>>> In my template I have a chink of code that displays a link to the
>>>>>>>> cart if it exists and has at least one item in it:
>>>>>>>>
>>>>>>>> If I use the currentCart variable set in Controller.cfc, it returns
>>>>>>>> the cart from the session after the order is processed even though a 
>>>>>>>> cfdump
>>>>>>>> of the session shows it isn't there.
>>>>>>>>
>>>>>>>> <cfif isStruct(variables.**currentCart**) and
>>>>>>>> variables.currentCart.**getItemC**ount() gte 1>
>>>>>>>> <div class="row-fluid">
>>>>>>>>  <div id="viewCart" class="span12">
>>>>>>>>  <a href="#click_ViewCart#">Your cart: <span
>>>>>>>> class="bold">#variables.**curren**tCart.getItemCount()#</**span>
>>>>>>>> item<cfif variables.currentCart.**getItemC**ount() neq
>>>>>>>> 1>s</cfif></a> <a href="#click_ViewCart#"><img
>>>>>>>> src="images/shoppingCart.png" alt="view cart"></a>
>>>>>>>>  </div>
>>>>>>>> </div>
>>>>>>>> </cfif>
>>>>>>>>
>>>>>>>> *The display section still shows up after the order is complete*.
>>>>>>>>
>>>>>>>> But, If I use the entire getSession function from the
>>>>>>>> Controller.cfc it acts as it's supposed to:
>>>>>>>>
>>>>>>>> <cfif structKeyExists(variables.**user**Session, "cart") and
>>>>>>>> variables.userSession.cart.**get**ItemCount() gte 1>
>>>>>>>> <div class="row-fluid">
>>>>>>>>  <div id="viewCart" class="span12">
>>>>>>>> <a href="#click_ViewCart#">Your cart: <span class="bold">#variables.
>>>>>>>> **userSe**ssion.cart.getItemCount(**)#</**span> item<cfif
>>>>>>>> variables.userSession.cart.**get**ItemCount() neq 1>s</cfif></a>
>>>>>>>> <a href="#click_ViewCart#"><img src="images/shoppingCart.png" alt="view
>>>>>>>> cart"></a>
>>>>>>>>  </div>
>>>>>>>> </div>
>>>>>>>> </cfif>
>>>>>>>>
>>>>>>>> *The display section doesn't show up after the order is complete.*
>>>>>>>>
>>>>>>>> How can one call to the session return that the cart doesn't exist
>>>>>>>> and then a second, later call to the session on the same page return 
>>>>>>>> that
>>>>>>>> it does?
>>>>>>>>
>>>>>>>> Thank you for looking at this,
>>>>>>>>
>>>>>>>> Jeff P.
>>>>>>>>
>>>>>>>> --
>>>>>>>> Model-Glue Sites:
>>>>>>>> Home Page: http://www.model-glue.com
>>>>>>>> Documentation: http://docs.model-glue.com
>>>>>>>> Bug Tracker: http://bugs.model-glue.com
>>>>>>>> Blog: http://www.model-glue.com/blog
>>>>>>>>
>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>> Groups "model-glue" group.
>>>>>>>> To post to this group, send email to [email protected]
>>>>>>>> To unsubscribe from this group, send email to
>>>>>>>> model-glue+...@googlegroups.**co**m
>>>>>>>> For more options, visit this group at
>>>>>>>> http://groups.google.com/**group**/model-glue?hl=en<http://groups.google.com/group/model-glue?hl=en>
>>>>>>>
>>>>>>>
>>>>>> --
>>>>>> Model-Glue Sites:
>>>>>> Home Page: http://www.model-glue.com
>>>>>> Documentation: http://docs.model-glue.com
>>>>>> Bug Tracker: http://bugs.model-glue.com
>>>>>> Blog: http://www.model-glue.com/blog
>>>>>>
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "model-glue" group.
>>>>>> To post to this group, send email to [email protected]
>>>>>> To unsubscribe from this group, send email to
>>>>>> model-glue+...@googlegroups.**co**m
>>>>>> For more options, visit this group at
>>>>>> http://groups.google.com/**group**/model-glue?hl=en<http://groups.google.com/group/model-glue?hl=en>
>>>>>>
>>>>>>
>>>>>>
>>>>  --
>>>> Model-Glue Sites:
>>>> Home Page: http://www.model-glue.com
>>>> Documentation: http://docs.model-glue.com
>>>> Bug Tracker: http://bugs.model-glue.com
>>>> Blog: http://www.model-glue.com/blog
>>>>
>>>> You received this message because you are subscribed to the Google
>>>> Groups "model-glue" group.
>>>> To post to this group, send email to [email protected]
>>>> To unsubscribe from this group, send email to
>>>> model-glue+...@**googlegroups.**com
>>>> For more options, visit this group at
>>>> http://groups.google.com/**group**/model-glue?hl=en<http://groups.google.com/group/model-glue?hl=en>
>>>>
>>>>
>>>>  --
>>> Model-Glue Sites:
>>> Home Page: http://www.model-glue.com
>>> Documentation: http://docs.model-glue.com
>>> Bug Tracker: http://bugs.model-glue.com
>>> Blog: http://www.model-glue.com/blog
>>>
>>> You received this message because you are subscribed to the Google
>>> Groups "model-glue" group.
>>> To post to this group, send email to [email protected]
>>> To unsubscribe from this group, send email to
>>> model-glue+...@**googlegroups.com
>>> For more options, visit this group at
>>> http://groups.google.com/**group/model-glue?hl=en<http://groups.google.com/group/model-glue?hl=en>
>>>
>>
>>
>>
>> --
>> Plutarch - "The mind is not a vessel to be filled but a fire to be
>> kindled."
>>
>  --
> Model-Glue Sites:
> Home Page: http://www.model-glue.com
> Documentation: http://docs.model-glue.com
> Bug Tracker: http://bugs.model-glue.com
> Blog: http://www.model-glue.com/blog
>
> You received this message because you are subscribed to the Google
> Groups "model-glue" 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/model-glue?hl=en
>



-- 
Plutarch - "The mind is not a vessel to be filled but a fire to be kindled."

-- 
Model-Glue Sites:
Home Page: http://www.model-glue.com
Documentation: http://docs.model-glue.com
Bug Tracker: http://bugs.model-glue.com
Blog: http://www.model-glue.com/blog

You received this message because you are subscribed to the Google
Groups "model-glue" 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/model-glue?hl=en

Reply via email to