首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何导出富:数据表到excel

如何导出富:数据表到excel
EN

Stack Overflow用户
提问于 2012-11-02 16:20:01
回答 2查看 8.3K关注 0票数 6

我想将<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/构建自己的程序是可能的,但是我不知道从哪里开始实现这样的东西.

任何想法,如何最好地预先形成期望的出口和例子,将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-02 16:50:08

在JSF中使用POI与在普通Java中使用POI并没有什么区别。只需要一组表示每条记录的项。您必须已经使用了它,因为您使用的是datatable,它也接受这样的集合。您只需迭代完全相同的集合,就可以在POI中创建excel工作表。

下面是一个启动示例,其中items是您在datatable中也使用的一个List<Item>

代码语言:javascript
运行
复制
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提供。您还需要设置响应内容类型(以便浏览器知道与其关联的应用程序)和响应内容处理(以便将其作为附件打开并具有有效的文件名)。

代码语言:javascript
运行
复制
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示例假设JSF2.x。如果您实际使用的是JSF1.x,它缺少几个方便的ExternalContext委托方法,那么您需要通过ExternalContext#getResponse()获取原始的HttpServletResponse并在其上执行操作。另见如何从JSF后台bean提供文件下载?

票数 10
EN

Stack Overflow用户

发布于 2014-09-19 13:35:47

我还需要这个功能,所以我使用primefaces dataExporter组件并将其修改为与Richfaces一起使用。我还添加了导出collapsibleSubTable内部表的功能。Primefaces和Richfaces是开源的,请随意改进它。包含源和示例的包:捆绑

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13199185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档