2017-03-15 1 views
0

vaadin-girdを使用しているときに奇妙な動作が発生しています。私は、グリッド(gRegisteredRecords)内の選択された行からの情報をLinkedHashMapsのarrayListに格納しようとしています。何らかの理由で、最初のボタンbtnGenerateXMLをクリックすると、getSelectedRows()メソッドは空のリストを返しますが、2番目のメソッドは正常に動作します...なぜ最初の試みでは機能しませんか?ここにコードです..ありがとう!Vaadin Gird getSelectedRows()は空を返しますが、選択された行があります

_btnGenerateXML.addClickListener(p -> { 
     ArrayList <LinkedHashMap<String, String >> alSelected = new ArrayList<>(); 

     for (Object itemId: gRegisteredRecords.getSelectedRows()) { 

      LinkedHashMap<String, String> lhmProgrammValue = new LinkedHashMap<>(); 

      this.gRegisteredRecords.getContainerDataSource(). 
      getContainerPropertyIds().forEach(propertyId -> 
       lhmProgrammValue.put(propertyId.toString(), 
        this.gRegisteredRecords.getContainerDataSource() 
        .getItem(itemId) 
        .getItemProperty(propertyId) 
        .getValue().toString())); 
      alSelected.add(lhmProgrammValue); 
     } 

    } 
} 

答えて

0

将来的に誰かがこの問題に直面した場合、私は問題を発見しました。解決策を共有したいと思います。私が最初に思ったように、問題はクリックリスナーに付属していません。 _btnGenerateXMLボタンがVaadin com.vaadin.server.FileDownloaderオブジェクトにリンクされていたため、要素が適切に取得されてリストに追加されましたが、ファイルをダウンロードするときにfiledownloader要素がファイルを取得しません。私は、これはFileDownloaderから継承したクラスを作成し、次のようにメソッドをオーバーライドhandleConnectorRequest解決:

public class CustomFileDownload extends FileDownloader { 
public interface OnDemandStreamResource extends StreamSource { 
    String getFilename(); 
    } 

    private static final long serialVersionUID = 1L; 
    private final OnDemandStreamResource onDemandStreamResource; 

    public CustomFileDownload (OnDemandStreamResource onDemandStreamResource) { 
    super(new StreamResource(onDemandStreamResource, "")); 
    this.onDemandStreamResource = onDemandStreamResource; 
    } 

    @Override 
    public boolean handleConnectorRequest (VaadinRequest request, VaadinResponse response, String path) 
    throws IOException { 
    getResource().getStream().setParameter("Cache-Control", "private,no-cache,no-store"); 
    getResource().getStream().setParameter("Pragma", "no-cache"); 
    getResource().setCacheTime(0); 
    getResource().setFilename(onDemandStreamResource.getFilename()); 
    return super.handleConnectorRequest(request, response, path); 
    } 
} 

は、それが

を役に立てば幸い
関連する問題