2014-09-19 51 views
3

有谁知道我如何能做到这一点使用检票的想法?检测检票用户闲置

我想当一定量的时间没有检测到用户活动来自动显示一个检票odal窗口。我正在考虑以某种方式使用AjaxSelfUpdatingBehavior,但实际上我没有明确的想法。

这可能与检票?

回答

1

此外,您还可以使用一些JS库不是捕捉所有Ajax调用,并可以肯定,你的用户是真正AFK(甚至没有触及他的鼠标)。

例如,见this免费的框架,它的demo

和(如果你使用这个JS框架)在检票口,你必须处理

ifvisible.idle(function(){ 
    Wicket.Ajax.get({u: '${callbackUrl}'})// This code will work when page goes into idle status 
}); 

您必须设置$ {} callbackUrl从检票口代码来让JS知道在Java代码中进行什么操作。这并不难。看看here

这种方法比较棘手,但是如果你实现这个,你根本不用担心用户的操作(他可以阅读网站的信息,不要点击任何ajax链接,但突然间他会看到模态窗口)。

+0

谢谢。这完美的作品! – user1119371 2014-09-22 13:08:29

1

当然可以,我用这个作为自动注销功能

public class MyTimer extends AbstractAjaxTimerBehavior { 

    public MyTimer(int seconds) { 
     this(Duration.seconds(seconds)); 
    } 

    @Override 
    protected void onTimer(AjaxRequestTarget target) { 
     // show your window magic 
    } 
} 

一下添加到您页面(add(new MyTimer(300));),这将在您指定的秒数后调用。确保在进行ajax调用时用新的定时器替换定时器,或重置定时器。

+0

谢谢!你说你在做Ajax调用时替换定时器。你是怎样做的? – user1119371 2014-09-22 07:09:54

+1

我认为,你可以在页面上存储你的“MyTimer”实例作为变量,并在每一个Ajax调用,在你的页面(通过AjaxLink,AjaxBehavior等),调用myTimer.restart(AjaxRequestTarget)不是为了创造另一个实例处理的计时器。 – 2014-09-22 07:27:33