"活" Vaadin应用程序 - 如何更新浏览器视图

时间:2016-09-19 07:56:51

标签: java web-applications vaadin vaadin7

我有一个Vaadin应用程序,我喜欢" live",这样当不同的人打开应用程序时,他们会看到另一个人直接做出的更改,而不刷新他们的页面。

我该怎么做?

该应用程序目前包含两个面板,其中包含组件,可以拖放。

现在我希望在所有打开的浏览器视图中看到拖放,这样当人A拖放某些东西时,这会自动显示在其他视图中。

我目前只能做到这一点,当其他人刷新他们的观点时(我使用Vaadin 7.6.6)

更新

@Push
private static final class MyPanel extends Panel implements BroadcastListener {
    @Override
    public void attach() {
        Broadcaster.register(this);
        super.attach();
    }

    @Override
    public void detach() {
        Broadcaster.unregister(this);
        super.detach();
    }

    @Override
    public void receiveBroadcast(BroadcastMessage message) {
        System.out.println("BROADCOAST " + message);
    }
}

private Panel createTaskPanel(Status status) {
    Panel tasks = new MyPanel();
    tasks.setHeight("500px");

    VerticalLayout taskLayout = new VerticalLayout();
    taskLayout.setSpacing(true);
    taskLayout.setMargin(true);
    TaskContainer.get().getTasks().filter(task -> task.getStatus() == status).map(TaskComponent::new)
            .map(TaskComponent::getDragAndDrop).forEach(taskLayout::addComponent);

    DragAndDropWrapper wrapper = new DragAndDropWrapper(taskLayout);
    wrapper.setDropHandler(new DropHandlerImplementation(status, taskLayout));
    tasks.setContent(wrapper);
    return tasks;
}

1 个答案:

答案 0 :(得分:2)

你需要两件事:

  1. 启用服务器推送,以便将服务器更改推送到客户端
  2. 将更改广播到其他UI实例的某种方式。
  3. 这里有一个更详细的答案的例子

    Vaadin: get reference of UI to change data