2016-04-21 1 views
2

Я пытаюсь загрузить файл при нажатии кнопки и присутствует в столбце сетки vaadin. Как я могу добиться этогоКак загрузить файл при нажатии кнопки в сетке vaadin

Button tempDownloadBtn = new Button(); 
tempDownloadBtn.setId("tempdownloadbtn"); 
Grid tableList = new Grid(); 
tableList.addColumn("title", String.class).setHeaderCaption("TITLE").setSortable(false); 
tableList.addColumn("creationDate", String.class).setHeaderCaption("CREATION DATE").setSortable(false); 
tableList.addColumn("status", String.class).setHeaderCaption("STATUS").setSortable(false).setWidth(120).setRenderer(new HtmlRenderer()); 
tableList.addColumn("description", String.class).setHeaderCaption("DESCRIPTION").setSortable(false); 
tableList.addColumn("transactionType", String.class).setHeaderCaption("TRANSACTION TYPE").setSortable(false); 
tableList.addColumn("batchId", String.class).setSortable(false).setHidden(true); 
tableList.addColumn("action", String.class).setHeaderCaption("ACTION").setSortable(false).setRenderer(new ButtonRenderer(e -> { 
    Indexed indexed = tableList.getContainerDataSource(); 
    String action = indexed.getContainerProperty(e.getItemId(), "action").getValue().toString(); 
    if (action.equalsIgnoreCase("Download Passcode")) 
    { 
     String batchId = Encrypter.decodeString(indexed.getContainerProperty(e.getItemId(), "batchId").getValue().toString()); 
     DownloadVoucherDetailsResponseM downloadFileResponseM = new CommonB().dowloadVoucherDetails(batchId); 
     if (downloadFileResponseM.getResponseCode().equals("0000")) 
     { 
      System.out.println("DOWNLOAD_FILE_PATH::: " + downloadFileResponseM.getFilePath()); 
      File downloadFile = new File(downloadFileResponseM.getFilePath()); 

      FileDownloader fileDownloader = new FileDownloader(new FileResource(downloadFile)); 
      fileDownloader.extend(tempDownloadBtn); 

      Page.getCurrent().getJavaScript().execute("document.getElementById('tempdownloadbtn').click();"); 
     } 
    } 
})); 

enter image description here

+0

Я думаю, что нельзя использовать FileDownloader с Grid и ButtonRenderer, потому что у вас нет компонента Button для каждой строки под рукой. 1.) Попробуйте таблицу Vaadin, где вы можете сгенерировать кнопку для каждой строки и использовать FIleDownloader. Или 2.) Найдите другой способ загрузки при использовании Grid и нажмите обработчик событий ButtonRenderer. –

+0

Вы нашли решение? Пожалуйста, поделитесь им. –

+0

№ После многого поиска в google я не нашел решения для этого, тогда я решил переместиться на стол. –

ответ

0

Попробуйте это. Button downloadButton = new Button(); downloadButton.setIcon (FontAwesome.DOWNLOAD);

File file = new File("D:\\..\\sample.txt"); 

StreamResource.StreamSource source = new StreamResource.StreamSource() { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 4367295093982409180L; 

    public InputStream getStream() { 
     InputStream in = null; 
     try { 
      in = new FileInputStream(file); 
     } catch (FileNotFoundException e) { 
      /* e.printStackTrace(); */ 
     } 
     return in; 

    } 
}; 
StreamResource resource = new StreamResource(source, file.getName()); 
resource.setCacheTime(1); 

FileDownloader fileDownloader = new FileDownloader(resource); 
fileDownloader.extend(downloadButton); 
+0

Я думаю, что это правильный способ реализовать загрузку, но не просто удается интегрировать кнопку и сетку в vaadin 7 .x и 8.0. По крайней мере, я не знаю, как запускать событие нажатия кнопки в результате выбора элемента сетки. –