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超出“轰炸范围”。
此外,我对替代方案持开放态度。
答案 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建议的那样,你也可以setThrottlingSettings
到AjaxRequestAttributes
。
两种行为的组合可能更适合您的需求。