Return-Path: X-Original-To: apmail-wicket-users-archive@minotaur.apache.org Delivered-To: apmail-wicket-users-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id E39D111899 for ; Tue, 13 May 2014 08:55:35 +0000 (UTC) Received: (qmail 14174 invoked by uid 500); 12 May 2014 19:28:55 -0000 Delivered-To: apmail-wicket-users-archive@wicket.apache.org Received: (qmail 14133 invoked by uid 500); 12 May 2014 19:28:55 -0000 Mailing-List: contact users-help@wicket.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: users@wicket.apache.org Delivered-To: mailing list users@wicket.apache.org Received: (qmail 14073 invoked by uid 99); 12 May 2014 19:28:55 -0000 Received: from minotaur.apache.org (HELO minotaur.apache.org) (140.211.11.9) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 12 May 2014 19:28:55 +0000 Received: from localhost (HELO mail-we0-f174.google.com) (127.0.0.1) (smtp-auth username mgrigorov, mechanism plain) by minotaur.apache.org (qpsmtpd/0.29) with ESMTP; Mon, 12 May 2014 19:28:54 +0000 Received: by mail-we0-f174.google.com with SMTP id k48so7232450wev.5 for ; Mon, 12 May 2014 12:28:53 -0700 (PDT) X-Received: by 10.194.92.81 with SMTP id ck17mr23251531wjb.14.1399922933048; Mon, 12 May 2014 12:28:53 -0700 (PDT) MIME-Version: 1.0 Received: by 10.216.105.74 with HTTP; Mon, 12 May 2014 12:28:12 -0700 (PDT) In-Reply-To: <010e01cf6e03$f125fe70$d371fb50$@gmail.com> References: <00ad01cf6df1$d13b15d0$73b14170$@gmail.com> <010e01cf6e03$f125fe70$d371fb50$@gmail.com> From: Martin Grigorov Date: Mon, 12 May 2014 22:28:12 +0300 Message-ID: Subject: Re: Ajax timer not counting when tab doesn't have focus? To: "users@wicket.apache.org" Content-Type: multipart/alternative; boundary=047d7bfceb6a232dbe04f938f560 --047d7bfceb6a232dbe04f938f560 Content-Type: text/plain; charset=UTF-8 It could be that https://issues.apache.org/jira/browse/WICKET-5570 is the issue. Please try with 6.16.0-SNAPSHOT if you can. Martin Grigorov Wicket Training and Consulting On Mon, May 12, 2014 at 8:02 PM, Bruce Lombardi wrote: > Thanks Ernesto. > > Yes, I do mean another browser tab. I have some new information. The timer > seems to slow way down, but not stop counting down when the user switches > focus to another tab, either opening a new tab, or just clicking on another > tab. This is happening in both Chrome and Firefox. > > I thought that my code was never timing out, but further experimentation > with a shorter timeout period shows that it is doing the same thing as the > demo. That is, timing out in about 10 second when you stay on the tab, but > taking 3 minutes or longer to timeout when if you change focus to a > different tab. > > I would appreciate it if you could look at your demo and see the behavior > and then see if you have any ideas. > > As for my code, I really feel they difference with your code are > insignificant especially now that I know the behavior is the same. > > See below for the differences. > > Thanks again, > > Bruce > > > Code. > > I have your InactivitySignOutPanel.java, InactivitySignOutPanel.html and > InactivitySignOutPanel.js from the GitHub site with one slight modification > in InactivitySignOutPanel.java (see below). > > I setup my panel in a base class that serves as a superclass for all the > Web pages in the application (extends WebPage) I have a method that is > called to setup the timeout. Here is the method. > > public void setupTimeout() { > > // Change the following value to change the session > timeout. > int numberOfMinutesUntilTimeout = 15; > > int secondsPerMinute = 60; > int secondsToTimeout =numberOfMinutesUntilTimeout * > secondsPerMinute; > > add(new InactivitySignOutPanel("timeout", > Duration.seconds(secondsToTimeout)) { > > private static final long serialVersionUID = 1L; > > protected String getOnTimeChangedFunction() { > return "function(timeRemaining){if(!window.countDown) { > window.countDown = $('#countDown'); } > $(window.countDown).html(timeRemaining);}"; > } > }); > > add( new AjaxLink("link") { > > private static final long serialVersionUID = 1L; > > @Override > public void onClick(AjaxRequestTarget target) { > // do nothing > } > }); > } > > Here is the core code in InactivitySignOutPanel I have just modified the > respond method to call > > ((WebDocsSession)WebSession.get()).processLogoutorSessionExpiration(); > > setResponsePage(WebApplication.get().getApplicationSettings().getPageExpiredErrorPage()); > > so that the application does the right thing. Note: a break point shows > that this method is never call when the user is on another tab. > > > public InactivitySignOutPanel(String id, Duration duration) { > this(id, Model.of(duration)); > } > > public InactivitySignOutPanel(String id, IModel model) { > super(id, model); > setRenderBodyOnly(true); > add(ajaxBehavior = new AbstractDefaultAjaxBehavior() { > > private static final long serialVersionUID = 1L; > > @Override > protected void respond(AjaxRequestTarget target) { > beforeSignOut(target); > > ((WebDocsSession)WebSession.get()).processLogoutOrSessionExpiration(); > > setResponsePage(WebApplication.get().getApplicationSettings().getPageExpiredErrorPage()); > } > > @Override > protected void onBind() { > // panel will not be repainted, no need to markup markup > id. > } > > @Override > public void renderHead(Component component, IHeaderResponse > response) { > super.renderHead(component, response); > response.render(JavaScriptHeaderItem.forReference(JS)); > } > }); > } > > -----Original Message----- > From: Ernesto Reinaldo Barreiro [mailto:reiern70@gmail.com] > Sent: Monday, May 12, 2014 11:39 AM > To: users@wicket.apache.org > Subject: Re: Ajax timer not counting when tab doesn't have focus? > > Hi Bruce, > > > On Mon, May 12, 2014 at 4:52 PM, Bruce Lombardi > wrote: > > > This message is related to an original thread "Link to Wicket page > > from Javascript" but the focus is changed so much that I though a new > > title would be better. In the earlier thread I asked about linking to > > a Wicket page, but the real need was for help in implementing a > > session timeout that would send the user to a timeout page after a > > period of inactivity and would reset whenever a user clicked any > > button on the page. > > > > > > > > Ernesto Reinaldo Barreiro sent me links(see below) to a working demo > > that did exactly what I required. I used that code and everything > > seemed to work perfectly. However, I have since discovered that my > > timer does not seem to function correctly if the user goes to another > > tab. It seems like the timer stops timing down or slows way down until > > the user comes back to the original tab. > > > > Do you mean another browser tab? > > > > > > > I checked Ernesto's demo. If I go to the demo page and stay there it > > times out after roughly the defined 10 second timeout period, but if > > I go to the demo page, then click on another tab, it eventually times > > out, but after more than 3 minutes. My code, however, never seems to > > seem to timeout the page if I go to another tab. > > > > Does this happens in a all browsers? Or in particular one? > > Mind that this is just a quick "something" I build to illustrate the > idea... So, it might not be bullet proof. > > > > > > I really need this to work to fulfill a requirement and it is > > preventing the launch of our software. It all works fine except if > > the user goes to a different tab. > > > > > > > > Ernesto, or anyone, do you know why this is happening. Is the ajax > > timer stopping when the tab is not selected? Why is the demo > > eventually timing out while application is not (can't see any real > > difference in the code)? > > > > Without seeing your code or a quick-start app illustrating the problem it > might be difficult to point out what's going on. > > > > > Is there any way to get a better handle on this (e.g., firebug)? If > > the ajax timer is stopping, could something be done, perhaps using > > absolute elapsed time, to expire the session immediately if the user > > goes back to the tab? > > The latter is not ideal but might be acceptable. > > > > > > > > (Note: My session timeout in web.xml is 30 minutes, client timeout is > > 15 minutes, but for testing I set it to 10 seconds). > > > > > > > > > > > > // Links > > > > > > > > Demo of Example > > > > > > > > http://107.170.4.97:9080/client-sign-out-demo/?0 > > > > > > > > > > > > Code that sets up example > > > > > > > > https://github.com/reiern70/antilia-bits/blob/master/client-sign-out-p > > aren > > > > t/client-sign-out-demo/src/main/java/com/antilia/HomePage.java > > > > > > > > > > > > Code that provides the implementation (We have this code in package > > > > com.xyzco.web.docs.presentation.helpers.timeout) > > > > > > > > > > > > https://github.com/reiern70/antilia-bits/tree/master/client-sign-out-p > > aren > > > > t/client-sign-out-demo/src/main/java/com/antilia > > > > > > > > Thanks, > > > > Bruce > > > > > > > > > > > > > > > > -----Original Message----- > > > > From: Bruce Lombardi [mailto:brlombar@gmail.com] > > > > Sent: Monday, March 17, 2014 8:24 AM > > > > To: users@wicket.apache.org > > > > Subject: Re: Link to Wicket page from Javascript > > > > > > > > Thanks, this is very helpful. > > > > > > > > Bruce > > > > > > > > Sent from my iPad > > > > > > > > > On Mar 17, 2014, at 4:52 AM, Ernesto Reinaldo Barreiro > > > > wrote: > > > > > > > > > > You can see it at work here > > > > > > > > > > http://107.170.4.97:9080/client-sign-out-demo/ > > > > > > > > > > > > > > > On Mon, Mar 17, 2014 at 9:18 AM, Ernesto Reinaldo Barreiro < > > > > > reiern70@gmail.com> wrote: > > > > > > > > > >> Martin, > > > > >> > > > > >> What I mean is something that triggers the sign out before serve > > >> side > > > > >> session expires... and trigger this expire event. > > > > >> > > > > >> > > > > >> https://github.com/reiern70/antilia-bits/blob/master/client-sign-ou > > >> t- > > > > >> parent/client-sign-out/src/main/java/com/antilia/signout/Inactivity > > >> Si > > > > >> gnOutPanel.java > > > > >> > > > > >> https://github.com/reiern70/antilia-bits/blob/master/client-sign-ou > > >> t- > > > > >> parent/client-sign-out/src/main/java/com/antilia/signout/Inactivity > > >> Si > > > > >> gnOutPanel.js > > > > >> > > > > >> The above seem to work. You use it as in > > > > >> > > > > >> > > > > >> https://github.com/reiern70/antilia-bits/blob/master/client-sign-ou > > >> t- > > > > >> parent/client-sign-out-demo/src/main/java/com/antilia/HomePage.java > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> On Mon, Mar 17, 2014 at 9:11 AM, Martin Grigorov > > > > < mgrigorov@apache.org>wrote: > > > > >> > > > > >>> Hi, > > > > >>> > > > > >>> On Fri, Mar 14, 2014 at 9:25 PM, Ernesto Reinaldo Barreiro < > > > > >>> reiern70@gmail.com> wrote: > > > > >>> > > > > >>>> Hi, > > > > >>>> > > > > >>>> I would implement this as.. > > > > >>>> > > > > >>>> 1- A JS function that counts how much time has passed since last > > > > >>>> AJAX request. Once a certain threshold is passed an AJAX request > > >>>> is > > > > >>>> sent to > > > > >>> the > > > > >>>> page. > > > > >>>> 2- An AbstractAjaxBehavior that is added to the page. I would use > > > > >>>> it as context for AJAX request on 1). > > > > >>> > > > > >>> at that time the session should be already expired. > > > > >>> > > > > >>> But this can be used to do what is needed here - Wicket will > > > > >>> redirect to the configured PageExpiredErrorPage. > > > > >>> > > > > >>> > > > > >>>> 3- On the respond of AJAXBehavior you redirect to > > > > >>>> SessionTimeoutPage > > > > >>> and > > > > >>>> invalidate the session. > > > > >>>> > > > > >>>> > > > > >>>> > > > > >>>> On Fri, Mar 14, 2014 at 8:07 PM, Bruce Lombardi > > > > >>>> > > > > >>>> wrote: > > > > >>>> > > > > >>>>> Hi, > > > > >>>>> > > > > >>>>> > > > > >>>>> > > > > >>>>> An earlier question I asked about session timeouts was answered > > >>>>> by > > > > >>> Martin > > > > >>>>> Grigorov. I am implementing his suggestion and have a JQuery > > > > >>>>> script > > > > >>> what > > > > >>>>> sets a timer that times out after a certain period of inactivity. > > > > >>>>> The timeout triggers a function call. Currently, for a quick > > > > >>>>> test, I > > > > >>> have > > > > >>>>> that function use location.href to go to an arbitrary static web > > > > >>>>> page > > > > >>>> like > > > > >>>>> this: > > > > >>>>> > > > > >>>>> > > > > >>>>> > > > > >>>>> function whenUserIdle(){ > > > > >>>>> > > > > >>>>> location.href = > > > > >>>>> 'http://www.natural-environment.com'; > > > > >>>>> > > > > >>>>> } > > > > >>>>> > > > > >>>>> > > > > >>>>> > > > > >>>>> That works fine, but now I need to make it go to a Wicket page > > >>>>> in > > > > >>>>> my application, similar to what would happen if I had an anchor > > > > >>>>> tag > > > > like: > > > > >>>>> > > > > >>>>> > > > > >>>>> > > > > >>>>> > >>>>> href="#">SessionTimeoutPage > > > > >>>>> > > > > >>>>> > > > > >>>>> > > > > >>>>> But I can't figure out how to do this in the javascript function. > > > > >>>>> Can anyone tell me how to call the Wicket page from the > > >>>>> javascript > > > > >>>>> function? > > > > >>> > > > > >>> You can use and a > > > > >>> Label("expirationUrl", "window.expirePageUrl ='" + > > > > >>> urlFor(SessionTimeoutPage.class) + "';"); Then use it with: > > > > >>> location.href = window.expirePageUrl'; > > > > >>> > > > > >>> > > > > >>>>> > > > > >>>>> > > > > >>>>> > > > > >>>>> Thanks, > > > > >>>>> > > > > >>>>> > > > > >>>>> > > > > >>>>> Bruce > > > > >>>> > > > > >>>> > > > > >>>> -- > > > > >>>> Regards - Ernesto Reinaldo Barreiro > > > > >> > > > > >> > > > > >> > > > > >> -- > > > > >> Regards - Ernesto Reinaldo Barreiro > > > > > > > > > > > > > > > > > > > > -- > > > > > Regards - Ernesto Reinaldo Barreiro > > > > > > > > > > > -- > Regards - Ernesto Reinaldo Barreiro > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org > For additional commands, e-mail: users-help@wicket.apache.org > > --047d7bfceb6a232dbe04f938f560--