jsf primefaces 生成xls并下载,共有两种方法:
1.生成workbook,保存在服务器xls文件,读取服务器上的xls文件,生成(StreamedContent)InputStream返回给页面。
2.生成workbook,直接写到页面的响应流。
第一种方法,会在服务器上生成文件,对于这些文件的命名和管理(如清理)都要考虑清楚,否则会出现问题,(文件堆积,生成的文件被其他用户下载等)。
因此,对于没有其他特殊用途的文件,建议使用第二种方法。
第二种方法:
public void exportFile() throws IOException {
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
cell.setCellValue(0.0);
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
externalContext.setResponseContentType("application/vnd.ms-excel");
externalContext.setResponseHeader("Content-Disposition", "attachment; filename=my.xls");
workbook.write(externalContext.getResponseOutputStream());
facesContext.responseComplete();
}
页面:<p:commandButton ajax="false" action="#{testBean.exportFile()}" value="导出" icon="ui-icon-arrowthick-1-s" />