1

JSF/ICEFacesを使用しています。このページはICEFacesですが、ICEFacesのパフォーマンスが何らかの理由で遅いため、JSFデータテーブルを使用しています。とにかく、ICEFacesデータテーブルとは異なり、JSFテーブルにはExcel用のエクスポートが付属していないため、独自に作成しています。以下のようにApachePOIを使用することにしました。コードは正常に実行されますが、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}"/>

ありがとう、

タム

4

3 に答える 3

0

このコードを独自のサーブレットにプルすることをお勧めします。あなたはJSFの通常のライフサイクルを短絡させようとしています。それを行う方法を見つけることはできるかもしれませんが、このXLSファイルを処理する新しいサーブレットを作成して実行させる方がおそらく簡単でクリーンです。それ自身のもの。適切なオブジェクトをアクションボタンから一時的にセッションに配置し、それらをサーブレットに転送し、サーブレットで取得してから、セッションから削除することができます。

于 2009-06-30T18:56:45.170 に答える
0

ここに、ICEFacesの実装専用のブログ投稿を投稿しました。

于 2009-09-18T22:31:32.557 に答える
0

Actionlistenerの代わりにボタンアクションを使用する

私のために働いた

于 2011-08-03T17:59:14.940 に答える