gpt4 book ai didi

java - 无法访问 vaadin FileUpload FinishListener 内的 UI 元素

转载 作者:行者123 更新时间:2023-12-01 11:04:10 25 4
gpt4 key购买 nike

我正在尝试在我的 vaadin 应用程序中提供上传文件的功能

protected Upload QuestionImageUpload = new Upload("上传问题", QuestionReceiver);

    questionImageUpload.addFinishedListener(new Upload.FinishedListener() {
@Override
public void uploadFinished(Upload.FinishedEvent event) {
boolean hasLock = VaadinSession.getCurrent().hasLock();
button.setEnabled(false);
}
});

但是,在我的 FinishListener.uploadFinished() 中,如果我修改某些 UI 元素(在上面,我禁用了一个按钮),则不会应用修改。

我假设此方法可能会在非 UI 线程中调用,因此我通过在上面的 uploadFinished 中放置断点来检查 VaadinSession 是否可用。但是,VaadinSession.getCurrent() 没有返回 null。 hasLock 也是如此。

可能是什么原因?

我正在 Google App Engine 上运行这个 vaadin 应用程序(仍在 IntelliJ IDEA 中本地运行)。这可能是这背后的原因吗?

最佳答案

文件上传是作为对服务器的 POST 请求完成的,其中包含文件数据。上传完成后,将在该 POST 请求结束时调用 Upload.FinishedListeners。虽然所有线程局部变量均已正确设置,但这不是 UI 更新请求(或 UIDL 请求),并且发送到浏览器的响应仅包含通知浏览器上传已完成的文本。完成的任何 UI 更新都将排队,直到另一个请求请求它们。

因此,您需要要么使用@Push,以便将UI更改立即通过推送 channel 推送到客户端,要么最晚在开始上传时启用轮询,以便轮询请求能够接收用户界面发生变化。

关于java - 无法访问 vaadin FileUpload FinishListener 内的 UI 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33115073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com