导出为CSV JSF和PrimeFaces

导出到Excel JSF和PrimeFaces

我正在尝试下载在运行时创build的CSV文件。 这个链接是有用的Excel和我需要做同样的CSV。 HSSFWorkbook用于Excel中,但我使用FileWriter的CSV。 我需要一行来使用,而不是workbook.write(externalContext.getResponseOutputStream()); 我不能使用writer.write(externalContext.getResponseOutputStream()); FileWriterFileWritervariables,不接受outputStream作为参数。

在我看来,你在这里有两个问题:

  • 如果您不想写入文件,则不应该有FileWriter – 您需要为您的用例selectWriter抽象类的正确实现(这里,您要select写入OutputStream ,而不是一个File )。

  • 您正在尝试使用Writer#write(...)HSSFWorkbook#write(java.io.OutputStream) ,但是它们根本不会做同样的事情。 在HSSFWorkbook中,写入方法将工作簿的内容写入某个OutputStream; 该参数告诉您要写入的方法。 在Writer中,写入方法给作者自己写了一些东西; 该参数告诉方法你想写什么

根据您从HSSFWorkbook撰写的链接,以类似的方式编写CSV可能类似于:

 public void getReportData() throws IOException { FacesContext facesContext = FacesContext.getCurrentInstance(); ExternalContext externalContext = facesContext.getExternalContext(); externalContext.setResponseContentType("text/csv"); externalContext.setResponseHeader("Content-Disposition", "attachment; filename=\"my.csv\""); OutputStream out = externalContext.getResponseOutputStream()); Writer writer = new OutputStreamWriter(out); // Let's write the CSV content try { writer.write("Line number,Col 1,Col 2"); writer.write("1,Value 1,Value 2"); writer.write("2,Value 3,Value4"); } finally { if (writer != null { // Closing the writer also flushes it, and does the same to the underlying OutputStream writer.close(); } } facesContext.responseComplete(); } 

您可能使用的整个工作副本;

 String csvFileName = "mydoc.csv"; FileWriter writer = new FileWriter(csvFileName); int columnNameSize = activeTab.getColumnNames().size(); for (int i = 0; i < columnNameSize; i++) { writer.append(activeTab.getColumnNames().get(i)); if (i != (columnNameSize - 1)) { if (delimiterType.equalsIgnoreCase(TAB_DELIMITER_VALUE_NAME)) { writer.append('\t'); } else { writer.append(delimiterType); } } } writer.append("\n"); for (DBData[] temp : activeTab.getTabularData()) { int tempSize = temp.length; for (int k = 0; k < tempSize; k++) { writer.append(temp[k].toFullString()); if (k != (tempSize - 1)) { if (delimiterType.equalsIgnoreCase(TAB_DELIMITER_VALUE_NAME)) { writer.append('\t'); } else { writer.append(delimiterType); } } } writer.append("\n"); } writer.flush(); writer.close(); InputStream stream = new BufferedInputStream(new FileInputStream(csvFileName)); exportFile = new DefaultStreamedContent(stream, "application/csv", csvFileName);