我正在使用JBoss和PrimeFaces从Java应用程序查看csv导出。导出是从网页上的数据表直接调用PrimeFaces DataExporter和CSVExporter实现的。我可以足够合理地遵循所有步骤,但首先要从PrimeFaces上下文的外部上下文获取writer类型。
public void export(FacesContext context,...
ExternalContext externalContext = context.getExternalContext();
configureResponse(externalContext, filename, encodingType);
Writer writer = externalContext.getResponseOutputWriter();
...
else {
exportAll(context, table, writer);
}
...
writer.flush();
writer.close();
}
我想知道如何找到作家的具体阶级?
我在这方面的最终目的只是为了了解导出是否全部保留在堆内存中,直到导出完成(我怀疑是导出)还是有一些后台进程可能让其退出?
因此,我假设在末尾进行刷新意味着直到结束时才写入文件,但我只是对它正在逐行调用对PrintWriter的强制转换感到兴趣
protected void exportAll(FacesContext context, DataTable table, Object document) {
for(int rowIndex = 0; rowIndex < rowCount; rowIndex++) {
exportRow(table, document, rowIndex);
}
}
}
protected void exportRow(DataTable table, Object document, int rowIndex) {
table.setRowIndex(rowIndex);
...
exportCells(table, document);
...
}
@Override
protected void exportCells(DataTable table, Object document) {
PrintWriter writer = (PrintWriter) document;
for (UIColumn col : table.getColumns()) {
'write cell (no flush) }
}
}
有许多报告表明人们对Excel有问题,但对csv却没有。这仅仅是因为csv进程少了很多资源,还是因为我误读了它,而实际上每行写入之间的内存都被清空了?