簡體   English   中英

如何將rich:dataTable導出為ex​​cel

[英]How to export rich:dataTable to excel

我想將<rich:dataTable><rich:extendedDataTable>的內容導出到excel。

  • 我看到PrimeFaces有“出口商特色” http://www.primefaces.org/showcase/ui/exporter.jsf

  • 我希望只能使用PrimeFaces做類似的事情,但是使用richFaces(版本3.3.3)...(我想在未來的某個時候遷移到RichFaces 4但是我堅持使用3.3 .3現在)

  • 我已經讀過可以使用http://poi.apache.org/構建自己的,但我不知道從哪里開始實現這樣的東西......

任何關於如何最好地預先形成所需出口和示例的想法將不勝感激!

在JSF中使用POI與在普通Java中使用POI沒有什么不同。 只需擁有代表每條記錄的項目集合。 您必須已經擁有它,因為您正在使用也需要此類集合的數據表。 您只需迭代完全相同的集合即可在POI中創建Excel工作表。

這是一個啟動示例,其中itemsList<Item> ,您也在數據表中使用它:

Workbook workbook = new HSSFWorkbook();
Sheet sheet = workbook.createSheet("sheet title");
int rowIndex = 0;

for (Item item : items) {
    Row row = sheet.createRow(rowIndex++);
    int columnIndex = 0;

    row.createCell(columnIndex++).setCellValue(item.getId());
    row.createCell(columnIndex++).setCellValue(item.getName());
    row.createCell(columnIndex++).setCellValue(item.getValue());
    // ...
}

workbook.write(someOutputStream); // Write the Excel result to some output.

為了將此作為下載提供給JSF響應,您需要提供ExternalContext#getResponseOutputStream()作為someOutputStream 您還需要設置響應內容類型(以便瀏覽器知道要與其關聯的應用程序)和響應內容處置(以便將其作為附件打開並且它具有有效的文件名)。

FacesContext context = FacesContext.getCurrentInstance();
ExternalContext externalContext = context.getExternalContext();
externalContext.responseReset(); 
externalContext.setResponseContentType("application/vnd.ms-excel");
externalContext.setResponseHeader("Content-Disposition", "attachment;filename=export.xls");
workbook.write(externalContext.getResponseOutputStream());
context.responseComplete(); // Prevent JSF from performing navigation.

最后,必須調用FacesContext#responseComplete()以防止JSF執行默認導航任務(這只會通過將導航頁面的某些HTML輸出附加到末尾來破壞Excel文件)。

請注意,上面的JSF示例假定JSF 2.x. 如果您實際上使用的JSF 1.x缺少一些方便的ExternalContext委托方法,那么您需要通過ExternalContext#getResponse()獲取原始的HttpServletResponse並對其執行操作。 另請參見如何從JSF輔助bean提供文件下載?

我還需要這個功能,所以我采用了primefaces dataExporter組件並修改它以與Richfaces一起使用。 我還添加了導出collapsibleSubTable內部表的功能。 Primefaces和Richfaces是開源的,隨時可以改進它。 包含源和示例的bundle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM