Я использую JSF/ICEFaces. Страница ICEFaces, однако я использую JSF datatable, потому что ICEFaces имели медленную производительность по какой-то причине. Во всяком случае, в отличие от данных ICEFaces, таблица JSF не поставляется с экспортом, поэтому я пишу свой собственный. Я решил использовать Apache POI, как показано ниже. Код работает хорошо, но я не вижу всплывающих окон, чтобы сохранить файл excel. Я что-то упускаю?проблема при экспорте в excel с JSF
public void ExportWithPoi(ActionEvent e) throws IOException{
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
// ArrayList<PerfStatBean> statFilterResults;
Iterator<PerfStatBean> statsIterator = statFilterResults.iterator();
int i=0;
HSSFRow row;
row = sheet.createRow((short)0);
row.createCell((short)0).setCellValue("Current Application ID");
row.createCell((short)1).setCellValue("Event Name");
row.createCell((short)2).setCellValue("Generic Method Name");
while(statsIterator.hasNext()){
i++;
row = sheet.createRow((short)i);
PerfStatBean perfBean = statsIterator.next();
row.createCell((short)0).setCellValue(perfBean.getCurrent_appl_id());
row.createCell((short)1).setCellValue(perfBean.getCurrent_appl_id());
row.createCell((short)2).setCellValue(perfBean.getGeneric_method_name());
}
HttpServletResponse res = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
res.setContentType("application/vnd.ms-excel");
res.setHeader("Content-disposition", "attachment; filename=PerfCollector.xls");
try {
ServletOutputStream out = res.getOutputStream();
wb.write(out);
out.flush();
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
FacesContext faces = FacesContext.getCurrentInstance();
faces.responseComplete();
}
И кнопка Эксел:
<h:commandButton id="excelBtn"
rendered="#{statsDisplayAndFilter.renderNextBtn}"
image="./xmlhttp/css/rime/css-images/excel.png"
actionListener="#{statsDisplayAndFilter.ExportWithPoi}"/>
Спасибо,
Tam
Это, кажется, хороший выбор. Не могли бы вы дать мне код или ссылку о том, как с этим справиться? С моим кодом выше я мог видеть с помощью FireBug. Я вижу, что тело ответа содержит файл Excel, а тип содержимого - application/vnd.ms-excel, но он не выставляется для загрузки. Я верю, что если у меня это будет отдельный сервлет и перейду на этот сервлет, он может выполнить эту работу. Благодаря! – Tam
Это похоже на то, что вам нужно и/или имеет ссылки на то, что вам нужно: http://www.devx.com/Java/Article/31356 – Drew