7
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 版开始,这个机会就被抹杀了。网络上到处都是以前版本的教程,它们都包含 .setThrottleDelay() 方法。

基本上,目标是在该人停止输入表单时调用该行为。目前,每次当密钥启动时,它都会立即调用该行为,这基本上会向服务器端发送垃圾邮件。这就是为什么我想推迟。背景:我目前正在尝试对数据库进行查询并获取与表单输入类似的数据。所有这一切都发生在这个人打字的时候。但是为了将服务器端/SQL 保持在“轰炸范围”之外,需要延迟。

我也对替代品持开放态度。

4

3 回答 3

11

对于 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。

于 2012-10-17T05:29:55.933 回答
0

查看消息来源,您似乎可以AjaxRequestAttributes通过该方式获得该信息getAttributes()并对其进行调用setThrottlingSettings()

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

于 2012-10-16T10:45:17.597 回答
0

看来drop 行为是你所追求的:

丢弃 - 只处理最后一个 Ajax 请求,所有之前调度的请求都被丢弃

您可以指定一个放置行为,该行为仅适用于 Ajax 通道,方法是使用 自定义AjaxRequestAttributes行为,如wiki中所指出的:AjaxChannel.DROPupdateAjaxAttributes

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 还建议的那样,您也setThrottlingSettings可以将AjaxRequestAttributes.

可能这两种行为的组合更适合您似乎需要的东西。

于 2012-10-16T10:45:35.510 回答