0

私は wicket 1.5 を使用して Web アプリケーションを開発しています。homePage、ParentWebpage、および Panel の 3 つの Web ページがあります。ParentWebpage で AbstractAjaxTimerBehavior を設定し、Panel のコールバック関数 onTimer() を呼び出すと、すべて問題ありませんが、パネルでも AbstractAjaxTimerBehavior が使用され、コールバック関数 onTimer が呼び出されないのはなぜですか??

ここに私の例:

ホームページ.java

BookmarkablePageLink bookmarkablePageLink = new BookmarkablePageLink("linkToCurrentDiagnosePage", TestParent.class);
bookmarkablePageLink.add("label");
item.add(bookmarkablePageLink);

--> TestParent クラスに移動できるようになりました

TestParent.java

public class TestParent extends WebPage {
    /** The Constant logger. */
    private static final Logger LOGGER = Logger.getLogger(TestParent.class);
    boolean isSet = false;
    public TestParent() {
        LOGGER.error("Parent -> Cstr");
        Fragment fragment = new Fragment("fragments", "fragment1", TestParent.this);
        fragment.setOutputMarkupId(true);
        add(fragment);

        add(new AbstractAjaxTimerBehavior(Duration.seconds(1)) {

            @Override
            protected void onTimer(AjaxRequestTarget target) {
                LOGGER.error("Parent -> I'am here");
                if(isSet == false){
                    LOGGER.error("Parent -> I set the panel");
                    isSet = true;
                    Fragment fragment = new Fragment("fragments", "fragment2", TestParent.this);
                    fragment.setOutputMarkupId(true);
                    fragment.add(new TestChild("panel"));
                    TestParent.this.replace(fragment);
                    target.add(fragment);
                }
            }
        });
    }
}

TestParent.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <span wicket:id="fragments"></span>

    <wicket:fragment wicket:id="fragment1">
        FILL TEXT
    </wicket:fragment>

    <wicket:fragment wicket:id="fragment2">
        <span wicket:id="panel">[message]</span>
    </wicket:fragment>
</body>
</html>

TestChild.java

public class TestChild extends Panel {
    private static final Logger LOGGER = Logger.getLogger(TestChild.class);

    public TestChild(String id) {
        super(id);
        LOGGER.error("Child -> Cstr");

        add(new AbstractAjaxTimerBehavior(Duration.seconds(1)) {

            @Override
            protected void onTimer(AjaxRequestTarget target) {
                LOGGER.error("CHILD --> I'am here");
            }
        });               
    }
}

TestChild.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <wicket:panel>

    </wicket:panel>
</body>

出力:

ERROR - TestParent                 - Parent -> Cstr

ERROR - TestParent                 - Parent -> I'am here

ERROR - TestParent                 - Parent -> I set the panel

ERROR - TestChild                  - Child -> Cstr

ERROR - TestParent                 - Parent -> I'am here

ERROR - TestParent                 - Parent -> I'am here

ERROR - TestParent                 - Parent -> I'am here

ERROR - TestParent                 - Parent -> I'am here
4

1 に答える 1

0

実際のコードを使用していると仮定すると、これは、両方を1秒のタイマーで作成しているためです。次に、タイマーコードで、子パネルを再作成します(したがって、子タイマーの動作)。子パネルが発砲する機会はありません!

于 2012-07-30T15:06:17.070 に答える