繁体   English   中英

导出到CSV JSF和PrimeFaces

[英]Export to CSV JSF and PrimeFaces

导出到Excel JSF和PrimeFaces

我正在尝试下载在运行时创建的CSV文件。 此链接对excel有用,我需要对CSV做同样的事情。 HSSFWorkbook用于excel,但我正在使用FileWriter CSV。 我需要一行而不是workbook.write(externalContext.getResponseOutputStream()); 我不能使用writer.write(externalContext.getResponseOutputStream()); writer是FileWriter变量,不接受outputStream作为参数。

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

  • 如果您不想写入文件,则不需要FileWriter您需要为用例选择Writer抽象类的正确实现(在这里,您要选择一个写入OutputStream ,而不是File )。

  • 您正在尝试像HSSFWorkbook#write(java.io.OutputStream)一样使用Writer#write(...) HSSFWorkbook#write(java.io.OutputStream) ,但是它们根本不会做相同的事情。 在HSSFWorkbook中,write方法将工作簿的内容写入到某些OutputStream中。 参数告诉方法要在哪里写。 在Writer中,write方法会向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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM