【问题标题】:problem when exporting to excel with JSF使用 JSF 导出到 excel 时出现问题
【发布时间】:2010-11-06 21:38:57
【问题描述】:

我正在使用 JSF/ICEFaces。该页面是ICEFaces,但是我使用的是JSF数据表,因为ICEFaces由于某种原因性能很慢。无论如何,与 ICEFaces 数据表不同,JSF 表没有导出到 excel,所以我正在编写自己的。我决定如下使用 Apache POI。代码执行良好,但我没有看到弹出保存 Excel 文件的窗口。我错过了什么吗?

    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();
    }

而excel按钮是:

            <h:commandButton id="excelBtn"
               rendered="#{statsDisplayAndFilter.renderNextBtn}"
                image="./xmlhttp/css/rime/css-images/excel.png"
                actionListener="#{statsDisplayAndFilter.ExportWithPoi}"/>

谢谢,

谭

【问题讨论】:

    标签: java jsf icefaces export-to-excel


    【解决方案1】:

    使用按钮操作而不是 Actionlistener

    为我工作

    【讨论】:

      【解决方案2】:

      我已经发布了一篇专门针对 ICEFaces 实现 here 的博文。

      【讨论】:

        【解决方案3】:

        我建议你把这段代码放到它自己的 servlet 中。您正在尝试缩短 JSF 的通常生命周期,虽然您可能能够找到一种方法来做到这一点,但简单地创建一个处理此 XLS 文件的新 servlet 并让它执行可能会更简单甚至更清洁它自己的东西。您可以通过操作按钮将适当的对象临时放入会话中,将它们定向到 servlet,在 servlet 中抓取它们,然后将它们从会话中删除。

        【讨论】:

        • 这似乎是个不错的选择。你能给我一个关于如何处理的代码或链接吗?使用上面的代码,我可以看到 FireBug 我可以看到响应正文包含 Excel 文件,内容类型是 application/vnd.ms-excel 但它不会弹出下载。我相信如果我将它作为单独的 servlet 并转发到该 servlet,它可能会完成这项工作。谢谢!
        • 这似乎包含您需要的大部分内容和/或链接到您需要的内容:devx.com/Java/Article/31356
        猜你喜欢
        • 1970-01-01
        • 2011-10-18
        • 2011-09-28
        • 1970-01-01
        • 2020-12-04
        • 1970-01-01
        • 2011-06-18
        • 2013-08-21
        • 1970-01-01
        相关资源
        最近更新 更多