- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在我的 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/
我正在尝试在我的 vaadin 应用程序中提供上传文件的功能 protected Upload QuestionImageUpload = new Upload("上传问题", QuestionRec
我是一名优秀的程序员,十分优秀!