0

我正在使用 Vaadin 框架开发一个 Web 应用程序。

我正在使用 Vaadin Upload 组件。为方便起见,我们决定在文件已上传到服务器时禁用上传按钮。

问题是该按钮看起来已禁用,但单击时仍会打开文件浏览器对话框,让用户指定无法正确处理的其他文件。

在调试期间,我已经在 Upload progressListener 内部停止,并看到 Upload 对象的Enabled参数设置为false,即使我尝试单击 GUI 中的禁用按钮,对话框也会打开。

我试过搜索这是否是一个公认的错误,但找不到任何东西。

一些相关代码:

   //The first listener triggered when starting an upload, here the 
   // Upload component is set to disabled
    upload.addListener(new Upload.StartedListener() {
                public void uploadStarted(StartedEvent event) {
                    // this method gets called immediately after upload is started

                    upload.setEnabled(false);
    }

    // Listener being triggered a number of times during the upload. 
    // Here is where I debugged, saw that the Upload component was 
    // disabled but found that I still could open the dialogue. 
            upload.addListener(new Upload.ProgressListener() {
                public void updateProgress(long readBytes, long contentLength) {

    }

    // The last listener triggered, here the Upload component is 
    // set to enabled. The button now looks clickable but it behaves 
    // the same way as it does when the Upload component is disabled.
    upload.addListener(new Upload.FinishedListener() {
                public void uploadFinished(FinishedEvent event) {
                    if(uploadOk){
                        fileListItem.getProgressIndicator().stopPolling();
                        fileListItem.removeProgressIndicator();
                        fileListItem.removeAbortButton();
                        submitFilesBt.setEnabled(true);
                        removeFilesBt.setEnabled(true);
                        fileListItem.setFile(counter.getFile());
                        upload.setEnabled(true);                }
                }
            });
4

2 回答 2

0

我从来没有设法解决该组件的问题,但我通过将 Upload 组件放在专用容器中解决了这个问题。当我开始上传时,我从容器中删除了组件,而是插入了一个看起来相同但被禁用的虚拟替换按钮。上传完成后,我删除了虚拟按钮并再次添加了上传按钮。

使用这种方法可以避免这个问题,但如果有人认为这是一个相当粗略的解决方案,我会同意......

于 2012-08-16T12:24:17.013 回答
0

这听起来显然是上传组件中的一个错误,您应该考虑在http://dev.vaadin.com/上报告它。

同时,AndroidHustle 建议的解决方法可能是最简单的一种。此外,我建议将此解决方案打包到 CustomComponent 并继续编写应用程序的其余部分,并在修复可用时将实现切换回 Upload。

于 2012-08-21T08:26:56.503 回答