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以降、この機会はなくなりました。また、Webには、すべて.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

ソースを見ると、AjaxRequestAttributesviagetAttributes()を取得してこれを呼び出すことができるように見えますsetThrottlingSettings()

wikiにAPIの変更が記載されていないのは不思議です。6.1の発表では、これを代替品のドロップと呼んでいます。

于 2012-10-16T10:45:17.597 に答える
0

ドロップ動作があなたが求めているものであるようです:

ドロップ - 最後の Ajax リクエストのみが処理され、以前にスケジュールされたリクエストはすべて破棄されます

wikiで指摘されているように、 をAjaxRequestAttributes使用して動作をカスタマイズするAjaxChannel.DROPことにより、Ajax チャネルに対してのみドロップ動作を指定できます。updateAjaxAttributes

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 に答える