Vaadin GridLayout 没有正确更新
Vaadin GridLayout not updating correctly
我有一个问题,Vaadin 没有及时更新 GridLayout 的显示。 GridLayout 是 VerticalLayout 中的一个组件,我用它来列出所有上传的文件。当我上传文件时,服务器端一切正常,但客户端在他向服务器创建新请求之前看不到更改(通过上传另一个文件或触发其他事件/虽然很少更新工作正常)。
这是包含有问题的 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 设置为即时以及将整个组件标记为脏,但似乎没有什么不同。
所以基本上我在这里做错了什么?或者,如果没有,是否有 "nice" 方法可以强制客户端更新其组件?
根据@Morfic 的建议,我在自动模式下启用了 Server-Push 插件,现在客户端所需的更新由该插件进行。不确定我有多喜欢这个解决方案,但它确实有效。
我有一个问题,Vaadin 没有及时更新 GridLayout 的显示。 GridLayout 是 VerticalLayout 中的一个组件,我用它来列出所有上传的文件。当我上传文件时,服务器端一切正常,但客户端在他向服务器创建新请求之前看不到更改(通过上传另一个文件或触发其他事件/虽然很少更新工作正常)。
这是包含有问题的 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 设置为即时以及将整个组件标记为脏,但似乎没有什么不同。
所以基本上我在这里做错了什么?或者,如果没有,是否有 "nice" 方法可以强制客户端更新其组件?
根据@Morfic 的建议,我在自动模式下启用了 Server-Push 插件,现在客户端所需的更新由该插件进行。不确定我有多喜欢这个解决方案,但它确实有效。