Wicket:是否可以从线程更新标签值?

时间:2012-06-01 11:06:55

标签: java wicket

例如,我有一个html span,应该在应用程序进行一些测试时更新(比如做post,然后等待一段时间用于响应并表示结果)。所以我想展示这个行动的当前进展。

我尝试在myPage.java中创建扩展WebPage的线程。它的定义是:

class TestThread extends Thread{

    private Label current_message_lbl;
    private Component component;

    public void run() {
        try {
            this.sleep(1000);
            current_message_lbl.setDefaultModelObject(new StringResourceModel("test-SENDING-COMMANDS",component, null));
                    /* HTTP POST and other test code*/

        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    public void setCurrentMesssageLabel(Label current_message_lbl){
        this.current_message_lbl = current_message_lbl;
    }
    public void setComponent(Component component){
        this.component = component;
    }
}

我从以下开始:

TestThread thread = new TestThread();
thread.setCurrentMesssageLabel(current_message_lbl);
thread.setComponent(component);
thread.start();

我收到此错误消息后

  

当前线程Thread-103

没有附加应用程序

我也尝试过定义类似的线程:

class TestThread extends WicketApplication implements Runnable{

1 个答案:

答案 0 :(得分:4)

您可以将AjaxSelftUpdatingTimeBehavior添加到您的组件。比此行为每秒或更新时更新组件。但是您必须在线程中更改组件的模型。

此外,如果您尝试延迟加载组件,则可以检查AjaxLazyLoadPanelherehere中有一些示例。