我有以下问题。我正在使用Primefaces、JSF和Java。我正在尝试用数据库的数据生成一个csv文件,并用组件p:file导出它primefaces的下载。csv的生成没有问题,但有些数据是带逗号init的字符串,因此结果是在不同的列中分离。有没有办法设置另一个分隔符?(例如;(。
生成字节数组的方法是:
public byte[] generateCsv(){
StringBuilder data = new StringBuilder();
data.append("header1, header2, header3n");
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}" />
您的Options类看起来像这样设置为冒号(:(,例如。。。
public CSVOptions getCsvOptions() {
CSVOptions options = new CSVOptions();
options.setDelimiterChar(":");
return options;
}