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

ecfsfe2w  于 2023-09-27  发布在  其他
关注(0)|答案(2)|浏览(92)

我有以下问题。我正在使用Primefaces,JSF和Java。我试图生成一个csv文件与数据库的数据和导出它与组件p:fileDownload的primefaces。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

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

nle07wnf

nle07wnf1#

您可以在PF 7.0或更高版本中使用options属性!
固定:https://github.com/primefaces/primefaces/issues/48

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

你的Options类看起来像这样,设置为冒号(:),例如……

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

voase2hg2#

在Primefaces 11中,你不能再设置分隔符了。但也许

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

做你需要的事

相关问题