2017-03-31 40 views
0

我有一個問題,Vaadin沒有及時更新GridLayout的顯示。 GridLayout是VerticalLayout中的一個組件,用於列出所有上傳的文件。當我上傳一個文件時,在服務器端一切正常,但客戶端直到他向服務器創建一個新請求(通過上傳另一個文件或觸發其他事件/很少更新能正常工作)纔看到更改。Vaadin GridLayout沒有正確更新

這裏是包含有問題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(); 
    } 
} 

我已經嘗試過的網格佈局設置爲近期和標記在整個組件爲髒,但似乎沒有有所作爲。

所以基本上我在這裏做錯了什麼?或者,如果沒有,是否有一種「很好」的方式可以強制客戶更新其組件?

+0

你使用[push](https://vaadin.com/docs7/-/part7/framework/advanced/advanced-push.html)嗎? – Morfic

+0

@Morfic這可能會正常工作。儘管我認爲必須有另一種方式,因爲Vaadin的設計是在沒有推入插件的情況下運行的。 – kalsowerus

回答

0

正如@Morfic所建議,我在自動模式下啓用了Server-Push插件,現在客戶端所需的更新由該插件完成。不知道我有多喜歡這個解決方案,但它工作。