在Wicket框架中加载页面时显示进度条

时间:2015-08-05 14:12:17

标签: ajax wicket

我在Wicket框架中要求在加载页面时显示进度条。我已经看过很多例子,但我无法弄明白。

我知道页面加载的时间,所以20秒的时间我想调用进度条。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

假设您通过单击某个链接/按钮打开页面,其中一个选项可能如下所示。该解决方案具有带有AjaxIndicatorAppender的IndicatingAjaxButton,并在' onSubmit'中启动了新的Thread。方法。在开始新的Thread之前,它有setResponsePage到目标页面,这将需要10秒钟加载。

带有按钮的TestPage打开目标页面TestPage2,延迟时间为10秒。在你的情况下,它将是20。

   public class TestPage extends WebPage implements IAjaxIndicatorAware {

        AjaxIndicatorAppender indicator;

        public TestPage(final PageParameters parameters) {

            super(parameters);
            setOutputMarkupId(true);
            indicator = new AjaxIndicatorAppender(){
                @Override
                protected CharSequence getIndicatorUrl() {
                    return super.getIndicatorUrl();
                }
            };


            Form<Void> form = new Form<Void>("form");

            IndicatingAjaxButton button = new IndicatingAjaxButton("submit", form) {
                protected void onSubmit(final AjaxRequestTarget target, Form form) {
                    setResponsePage(new TestPage2(null));
                    new Thread() {
                        public void run() {
                          //Do Nothing
                        }
                    }.start();
                }
            };

            button.add(indicator);
            form.add(button);

            add(form);
        }


        @Override
        public String getAjaxIndicatorMarkupId() {
            return indicator.getMarkupId();
        }
    }

TestPage.html:

<html xmlns:wicket>

<style>
    .wicket-ajax-indicator img{
    width:50px;
    height:50px;
    }
</style>

<head>
</head>
<body>
<strong>Wicket Quickstart Archetype Homepage</strong>

<div style="width:50%;">
    <form wicket:id="form">
        <input type="submit" wicket:id="submit" value="Open Test Page 2">
    </form>
</div>
</body>
</html>

以下是延迟回复的页面:

public class TestPage2 extends WebPage {

    public TestPage2(PageParameters parameters) {
        super(parameters);

        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        add(new Label("delayedLbl", Model.of("Delayed by 10 seconds...")));
    }
}

这是TestPage2.html:

<html xmlns:wicket>
<head>

</head>
<body>

<div>
    <span wicket:id="delayedLbl">Delayed...</span>
</div>
</body>
</html>

希望这有帮助。