2017-03-31 1 views
0

Vaadin이 GridLayout의 디스플레이를 제때에 업데이트하지 않는 문제가 있습니다. GridLayout은 업로드 된 모든 파일을 나열하는 데 사용하는 VerticalLayout의 구성 요소입니다. 파일을 업로드 할 때 서버 쪽에서 모든 것이 잘 작동하지만 서버에 새 요청을 만들 때까지 클라이언트가 변경 사항을 보지 못합니다 (다른 파일을 업로드하거나 다른 이벤트를 트리거하거나 업데이트가 잘 작동하지 않음). 이미 즉시에 GridLayout과 설정뿐만 아니라 더러운하지만 아무것도로 전체 구성 요소를 표시하는 시도Vaadin 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과를 포함하는 구성 요소입니다.

기본적으로 나는 여기서 뭔가 잘못하고 있습니까? 아니면 클라이언트가 구성 요소를 업데이트하도록 강제 할 수있는 "좋은"방법이 있습니까?

+0

[푸시] (https://vaadin.com/docs7/-/part7/framework/advanced/advanced-push.html)를 사용하고 있습니까? – Morfic

+0

@ Morfic 아마 잘 될 것입니다. Vaadin은 push addon없이 작동하도록 설계되었으므로 다른 방법이 있어야한다고 생각합니다. – kalsowerus

답변

0

@Morfic에 의해 제안 된대로 나는 Server-Push 자동 모드에서 addon을 활성화했으며 이제 클라이언트에 필요한 업데이트는 해당 추가 기능에 의해 이루어집니다. 내가 그 솔루션을 얼마나 좋아하는지 잘 모르지만 작동한다.

관련 문제