6

Apache Wicket で AjaxSelfUpdatingTimerBehavior を追加してから削除するのに問題があります。ビヘイビアーは正常に追加されますが、ビヘイビアーを削除するとすぐに「ページの期限切れ」がブラウザに表示されます。これは、削除がクリーンではなかったためだと思います。私のセットアップは基本的に、タイマーで変化し始めるラベルと、「行く」と「止まる」という 2 つのリンクです。「実行」をクリックしてから「停止」をクリックできるようにしたいです (明らかに、その逆は決して機能しないことがわかっています!)。ここに私の完全なマークアップがあります:

<html>    
    <body>            
        <span wicket:id="message">message will be here</span><br/>
        <a wicket:id="go">Go</a><br/>        
        <a wicket:id="stop">Stop</a>        
    </body>
</html>

ここに私のコードがあります:

// imports all from standard wicket
public class HomePage extends WebPage {

    private static final int INTERVAL = 500;

    public HomePage(final PageParameters parameters) {

        final Component label = new Label("message",
            "Hello").setOutputMarkupId(true);

        add(label);

        final IBehavior updater = new AjaxSelfUpdatingTimerBehavior(Duration
            .milliseconds(INTERVAL)) {
            @Override
            protected void onPostProcessTarget(AjaxRequestTarget target) {                    
                label.setDefaultModelObject(String.valueOf(System.nanoTime()));             
            }
        };

        AjaxLink<String> go = new AjaxLink<String>("go") {
            @Override
            public void onClick(AjaxRequestTarget target) {
                label.add(updater);                             
                target.addComponent(label);
            }           
        };

        AjaxLink<String> stop = new AjaxLink<String>("stop") {
            @Override
            public void onClick(AjaxRequestTarget target) {
                label.remove(updater);
                target.addComponent(label);
            }           
        };

        add(go, stop);
    }
}

私は Wicket 1.4.3 を使用しています。

どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

3

stop()動作を完全に削除しようとするのではなく、メソッドを使用してこれを解決しました。

私は実際にそれを停止した後、ある時点で完全に削除たいと思っています(私の解決策には、「行く」を押すたびに動作を新しくすることが含まれており、100万の動作を蓄積することなく停止と開始を続けたいからです)。後のラウンドトリップで削除される動作のリストを維持します。

于 2009-11-02T17:41:29.507 に答える
0

タイマーの動作を再度有効にするために、AbstractAjaxTimerBehavior で restart() などを呼び出すことができればよかったでしょう。

于 2009-11-13T15:01:45.830 に答える