我有以下问题。我正在使用 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
有办法设置不同的分隔符吗? 谢谢
您可以在 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;
}
在 Primefaces 11 中,您无法再设置分隔符。 但也许
public CSVOptions getCsvOptions() {
// delimiter = ;
return CSVOptions.EXCEL_NORTHERN_EUROPE;
}
满足您的需求。