Vaadin GridLayout无法正确更新

时间:2017-03-31 12:27:59

标签: java vaadin vaadin7

我有一个问题,Vaadin没有及时更新GridLayout的显示。 GridLayout是VerticalLayout中的一个组件,用于列出所有上传的文件。当我上传文件时,一切都在服务器端工作正常,但客户端没有看到更改,直到他向服务器创建新请求(通过上传另一个文件或触发其他一些事件/很少更新工作正常)。 / p>

以下是包含有问题的GridLayout的组件:

public class ListedMultiFileUpload extends VerticalLayout {
    private MultiFileUpload multiFileUpload;
    private GridLayout fileList;

    public ListedMultiFileUpload(UploadFinishedHandler uploadFinishedHandler, UploadStateWindow uploadStateWindow) {
        multiFileUpload = new MultiFileUpload(uploadFinishedHandler, uploadStateWindow);
        fileList = new GridLayout(2, 5);
        fileList.setImmediate(true);

        addComponents(multiFileUpload, fileList);
    }

    public SmartMultiUpload getSmartUpload() {
        return multiFileUpload.getSmartUpload();
    }

    public void addFile(String fileName, final Runnable fileRemover) {
        final Label label = new Label(fileName);
        final Button button = new Button("X");
        button.addClickListener(new ClickListener() {
            @Override
            public void buttonClick(ClickEvent event) {
                fileList.removeComponent(label);
                fileList.removeComponent(button);
                fileRemover.run();
            }
        });
        fileList.addComponent(label);
        fileList.addComponent(button);
        markAsDirtyRecursive();
    }
}

我已经尝试将GridLayout设置为immediate,并将整个组件标记为脏,但似乎没有任何区别。

所以基本上我在这里做错了吗?或者如果没有,是否有一个很好的"我可以强迫客户更新其组件吗?

1 个答案:

答案 0 :(得分:0)

正如@Morfic所提议的,我在自动模式下启用了Server-Push插件,现在客户端所需的更新是由该插件完成的。不知道我有多喜欢这个解决方案,但它确实有用。