使用组件文件导出 csv 当数据包含逗号时,primefaces 下载会产生逗号分隔符问题

问题描述 投票:0回答:2

我有以下问题。我正在使用 Primefaces、JSF 和 Java。我正在尝试生成一个包含数据库数据的 csv 文件,并使用 primefaces 的 p:fileDownload 组件将其导出。 csv生成没有问题,但有些数据是带有逗号init的字符串,所以结果是在不同的列中分开。有没有办法设置另一个分隔符? (例如;).

生成字节数组的方法是这样的:

public byte[] generateCsv(){
                StringBuilder data = new StringBuilder();
                data.append("header1, header2, header3\n");
                for (element elem : listElements) {
                    data.append(elem.getCode()+","+elem.getName()+","+elem.getData+"\n");
                }
                byte[] bytes = String.valueOf(data).getBytes();
                return bytes;
}

在前端,bean有这个方法:

public StreamedContent exportCsv() {
        try {
            
            byte[] cert = businessBean.generateCsv();
            if (cert != null) {
                InputStream targetStream = new ByteArrayInputStream(cert);
                StreamedContent file = new DefaultStreamedContent(targetStream, "application/csv", "Example.csv");
                
                return file;
            } else {
               //ERROR
            }

        } catch (Exception ex) {
            
        }
        return null;
    }

在xhtml中生成csv的按钮就是这个:

<p:fileDownload contentDisposition="inline"   value="#{exampleBean.exportCsv()}" />

结果: 如果每列的元素应该是:

column1= elem1
column2= elem2.1,elem2.2
column3=elem3.1,elem3.2

文件中每个元素的显示方式如下。

column1= elem1
column2= elem2.1
column3=elem2.2
column4=elem3.1
column5=elem3.2

有办法设置不同的分隔符吗? 谢谢

java csv jsf primefaces
2个回答
1
投票

您可以在 PF 7.0 或更高版本中使用

options
属性!

已修复:https://github.com/primefaces/primefaces/issues/48

<p:dataExporter type="csv" target="tbl" fileName="cars" options="#{view.csvOptions}" />

您的选项类看起来像这样设置为冒号(:) 例如...

public CSVOptions getCsvOptions() {
    CSVOptions options = new CSVOptions();
    options.setDelimiterChar(":");
    return options;
}

0
投票

在 Primefaces 11 中,您无法再设置分隔符。 但也许

public CSVOptions getCsvOptions() {
    // delimiter = ;
    return CSVOptions.EXCEL_NORTHERN_EUROPE;
}

满足您的需求。

© www.soinside.com 2019 - 2024. All rights reserved.