2009-06-30 4 views
1

저는 JSF/ICEFaces를 사용하고 있습니다. 이 페이지는 ICEFaces이지만, ICEFaces가 어떤 이유로 느린 성능을 가지기 때문에 JSF 데이터 테이블을 사용하고 있습니다. 어쨌든, ICEFaces 데이터 테이블과는 달리, JSF 테이블은 엑셀과 함께 제공되지 않으므로 내 자신을 작성하고 있습니다. 나는 아래와 같이 아파치 POI를 사용하기로 결정했다. 코드는 잘 실행되지만 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}"/> 

감사합니다,

답변

0

난 당신이 자신의 서블릿이 코드를 당겨 좋을 것. JSF의 일반적인 수명주기를 단락시키려는 시도를하고 있으며,이를 수행 할 수있는 방법을 찾을 수는 있을지 모르지만이 XLS 파일을 처리하는 새로운 서블릿을 만들어서 그렇게하는 것이 더 간단하고 더 깔끔할 수도 있습니다. 그 자신의 것. 액션 버튼에서 일시적으로 적절한 객체를 세션에 배치하고, 서블릿으로 보내고, 서블릿에서 잡아서 세션에서 제거 할 수 있습니다.

+0

일했다. 어떻게 처리 할 수있는 코드 나 링크를 제공해 주시겠습니까? 위의 코드를 사용하면 FireBug에서 볼 수있는 응답 본문에 Excel 파일이 포함되어 있고 콘텐츠 유형이 application/vnd.ms-excel이지만 다운로드를 위해 팝업되지 않습니다. 내가 별도의 서블릿으로 서블릿에 전달하면 서블릿에 전달할 수 있다고 생각한다. 감사! – Tam

+0

이것은 여러분이 필요로하는 것의 대부분을 갖고 있거나 필요한 것에 대한 링크를 가지고 있습니다 : http://www.devx.com/Java/Article/31356 – Drew

0

나는 ICEFaces 구현을위한 블로그 게시물을 게시했습니다. here. 대신에 ActionListener를

0

사용 버튼 액션은 좋은 선택이 될 것 같다 저