[web2py] Re: Document Expired/ Need to reload page on using browser back button
Thanks a lot Anthony for the solution. -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[web2py] Re: Document Expired/ Need to reload page on using browser back button
The problem is that you are making a POST request to return the grid, which is fundamentally a GET action. When you use the browser back button to try to return to a page that was requested via POST, the browser will typically display a message indicating the page has expired (because responses to POST requests are not cacheable) and make you jump through some hoops to re-submit the request (this is because POST requests generally result in changes to resources, so it is assumed you do not want to re-submit and repeatedly make the same change simply by hitting the back button). In this case, a better approach would be to make a GET request by changing the form method to "get". However, that will put "var1" and "testval" into the query string of the /default/results URL, which you may not want. As an alternative, you can submit the form back to the index function and then have the index function redirect to the results function after saving "var1" to the session: In index.html, change the form method to "get": In the controller: def index(): if request.vars: if request.vars.testval and session.var1: del session.var1 if request.vars.var1 and not session.var1: session.var1 = request.vars.var1 redirect(URL('default', 'results')) return dict(message='Hello World') def results(): grid = {} if session.var1: query = (db.Category.Name==session.var1) grid = SQLFORM.grid(query=query) return dict(grid=grid) Anthony On Saturday, August 30, 2014 1:14:25 AM UTC-4, Sarbjit wrote: > > Hi Anthony, > > I am able to reproduce this problem in a small app (tested on windows - > 2.9.5). > > *MODEL:* > > db.define_table('Category', > Field('Name'), > Field('SubCategoryName')) > > # Insert test data > > if db(db.Category.id>0).count() == 0: > db.Category.insert(Name='PC',SubCategoryName='Intel') > db.Category.insert(Name='PC',SubCategoryName='AMD') > db.Category.insert(Name='SmartPhone',SubCategoryName='Apple') > db.Category.insert(Name='SmartPhone',SubCategoryName='HTC') > db.Category.insert(Name='SmartPhone',SubCategoryName='Google') > > *CONTROLLER:* > > def index(): > response.flash = T("Welcome to web2py!") > return dict(message=T('Hello World')) > > def results(): > if (request.vars.testval and session.var1): > try: > del session.var1 > except Exception : pass > if (request.vars.var1) and (not session.var1): >session.var1 = request.vars.var1 > grid = {} > if session.var1: > query = (db.Category.Name==session.var1) > grid = SQLFORM.grid(query=query) > return dict(grid=grid) > > *VIEWS:* > > *results.html* > > {{extend 'layout.html'}} > {{=grid}} > > *index.html* > > {{extend 'layout.html'}} > action={{=URL('default','results')}} > > > PC > Smart Phone > > > > > > *Steps to reproduce the problem :-* > > 1. Select any value from the drop down and hit submit button. > 2. Select any GRID row and click on View > 3. Use Browser Back button -> Document will expire, you have to refresh to > get the results back (Tried on Chrome/Firefox) > 4. Repeat Step2 > 5. Now instead of using Browser back button, use GRID embedded back button. > 6. Now repeating step 2-3 won't cause any problem (document won't expire) > until the new selection is made from the selection drop down. > > Please suggest something to resolve this problem. > > Thanks > Sarbjit > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[web2py] Re: Document Expired/ Need to reload page on using browser back button
Hi Anthony, I am able to reproduce this problem in a small app (tested on windows - 2.9.5). *MODEL:* db.define_table('Category', Field('Name'), Field('SubCategoryName')) # Insert test data if db(db.Category.id>0).count() == 0: db.Category.insert(Name='PC',SubCategoryName='Intel') db.Category.insert(Name='PC',SubCategoryName='AMD') db.Category.insert(Name='SmartPhone',SubCategoryName='Apple') db.Category.insert(Name='SmartPhone',SubCategoryName='HTC') db.Category.insert(Name='SmartPhone',SubCategoryName='Google') *CONTROLLER:* def index(): response.flash = T("Welcome to web2py!") return dict(message=T('Hello World')) def results(): if (request.vars.testval and session.var1): try: del session.var1 except Exception : pass if (request.vars.var1) and (not session.var1): session.var1 = request.vars.var1 grid = {} if session.var1: query = (db.Category.Name==session.var1) grid = SQLFORM.grid(query=query) return dict(grid=grid) *VIEWS:* *results.html* {{extend 'layout.html'}} {{=grid}} *index.html* {{extend 'layout.html'}} PC Smart Phone *Steps to reproduce the problem :-* 1. Select any value from the drop down and hit submit button. 2. Select any GRID row and click on View 3. Use Browser Back button -> Document will expire, you have to refresh to get the results back (Tried on Chrome/Firefox) 4. Repeat Step2 5. Now instead of using Browser back button, use GRID embedded back button. 6. Now repeating step 2-3 won't cause any problem (document won't expire) until the new selection is made from the selection drop down. Please suggest something to resolve this problem. Thanks Sarbjit -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[web2py] Re: Document Expired/ Need to reload page on using browser back button
To make this easier to debug, it would be helpful if you could attach a minimal app that reproduces the behavior. On Friday, August 29, 2014 11:32:20 AM UTC-4, Sarbjit wrote: > > More Updates : > > I tried debugging it using Eclipse and I observed that whenever the > document expires, breakpoint is not hit. (results function). > > Also I observed that once I use the Back button from within the grid > field, it starts working from the browser also but only for current > selection (from index controller). > > If I change the selection from index and comes back to results - Then i > face the same problem again - have to use back button from grid once, then > browser button works fine for other grid entries. > > Now any pointers on where to proceed? > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[web2py] Re: Document Expired/ Need to reload page on using browser back button
More Updates : I tried debugging it using Eclipse and I observed that whenever the document expires, breakpoint is not hit. (results function). Also I observed that once I use the Back button from within the grid field, it starts working from the browser also but only for current selection (from index controller). If I change the selection from index and comes back to results - Then i face the same problem again - have to use back button from grid once, then browser button works fine for other grid entries. Now any pointers on where to proceed? -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[web2py] Re: Document Expired/ Need to reload page on using browser back button
Hi Anthony, Thanks for response. It would be difficult for me to share the exact code (my company specific data and lot of extra code etc) However, I am providing code snippets of the main portions that I feel are causing this problem and work flow (i have changed the variable names):- Please let me know, if you still require the exact code, then I'll try to reproduce it in a small app that can be shared as such. *INDEX :* index function from controllers returns options to be populated in select html column. It uses ajax callbacks to dynamically populate the select field. {{extend 'layout.html'}} ... ... Once the options are selected the results function is called :- def results(): if (request.vars.testval and session.var1 and session.var2) or (len(request.vars) == 0): try: del session.var1 del session.var2 except Exception : pass if (request.vars.var1) and (not session.var1): session.var1 = request.vars.var1 if request.vars.var2 and not session.var2: session.var2 = request.vars.var2 Then the session data is checked and a grid is created. Results view just displays the grid data. Now from the grid data, when I select any row and uses browser back button, I get this problem. Thanks Sarbjit -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[web2py] Re: Document Expired/ Need to reload page on using browser back button
Can you show your code? On Friday, August 29, 2014 12:54:48 AM UTC-4, Sarbjit wrote: > > I have an application having the layout as :- > > INDEX controller generates a view which have some drop-down and calls > another controller RESULTS : > > Snippet : > action={{=URL('default','results')}} > > > Now the RESULTS controller creates a grid and populates the view > corresponding to RESULT controller. > > PROBLEM :- > > When I view/edit any entry of GRID, then on using the browser back button, > I get the following message :- > > Document Expired (Firefox) > Need to conform form resubmissions (ERR_CACHE_MISS) -- Chrome > > In the RESULTS controller, I just query request.vars for variables and > store them in session and later on clear the session once the GRID is > populated. > > I don't see this problem if I use the BACK button provided by the GRID > itself (URL contained a signature - Is it causing it to work?) > > Can any one please suggest on how to address this problem. This is very > annoying problem. > > Thanks in advance > Sarbjit > > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.