Wicket 6.1 AjaxEventBehavior - 如何设置延迟?

时间:2012-10-16 10:27:46

标签: java ajax wicket

AjaxEventBehavior behavior = new AjaxEventBehavior("keyup"){

    @Override
    protected void onEvent(AjaxRequestTarget target) {

        System.out.println("Hello world!");
    }
};

form.add(behavior); 

在以前的Wicket版本中,我可以这样做:

behavior.setThrottleDelay(Duration.ONE_SECOND);

但是从版本6.1开始,这个机会就被抹去了。 Web上充满了以前版本的教程,这些教程都包含.setThrottleDelay()方法。

基本上,目标是在此人停止在表单中键入时调出行为。目前,每当密钥启动时,它每次都会调用该行为,这基本上会阻塞服务器端。这就是我想延迟的原因。背景:我目前正在尝试对数据库进行查询,并获取与表单输入类似的数据。在这个人打字的时候,所有这一切。但是目标是需要延迟服务器端/ SQL超出“轰炸范围”。

此外,我对替代方案持开放态度。

3 个答案:

答案 0 :(得分:9)

设置节流的设置已经与版本6.0.0的AjaxRequestAttributes中的所有其他Ajax设置统一,这是一个主要版本,并不是直接替代。

https://cwiki.apache.org/confluence/display/WICKET/Wicket+Ajax包含一个包含所有设置的表格,其底部会提到限制值。

使用它:

AjaxEventBehavior behavior = new AjaxEventBehavior("keyup") {

    @Override
    protected void onEvent(AjaxRequestTarget target) {
        System.out.println("Hello world!");
    }
    @Override
    protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
        super.updateAjaxAttributes(attributes);
        attributes.setThrottlingSettings(
            new ThrottlingSettings(id, Duration.ONE_SECOND, true)
        );
    }
};

最后一个构造函数参数是您需要的。检查它的javadoc。

答案 1 :(得分:0)

查看来源,看起来您可以通过AjaxRequestAttributes获取getAttributes()并在此处致电setThrottlingSettings()

奇怪的是,在wiki中没有提到api更改。 6.1的公告称其为替代品。

答案 2 :(得分:0)

drop behavior似乎就是你所追求的:

  

drop - 只处理最后一个Ajax请求,之前都是   预定的请求被丢弃

您可以通过AjaxRequestAttributes使用AjaxChannel.DROP自定义行为的updateAjaxAttributes来指定仅针对Ajax渠道的放弃行为,如{wiki所述。 3}}:

AjaxEventBehavior behavior = new AjaxEventBehavior("keyup"){

    @Override
    protected void onEvent(AjaxRequestTarget target) {
        System.out.println("Hello world!");
    }
    @Override
    protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
        super.updateAjaxAttributes(attributes);
        attributes.setChannel(new AjaxChannel("myChannel", AjaxChannel.Type.DROP));
    }
};

form.add(behavior); 

正如@bert建议的那样,你也可以setThrottlingSettingsAjaxRequestAttributes

两种行为的组合可能更适合您的需求。