سؤال

وأنا باستخدام JSF / ICEFaces. الصفحة هي ICEFaces لكن أنا باستخدام DataTable وJSF لICEFaces كان بطء الأداء لسبب ما. على أي حال، على عكس ICEFaces DataTable و، لا يأتي الجدول JSF مع التصدير إلى التفوق ذلك أنا أكتب بلدي. قررت استخدام أباتشي POI على النحو التالي. رمز ينفذ بشكل جيد ولكن لا أرى يطفو على السطح لحفظ ملف اكسل. أنا شيء مفقود؟

    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}"/>

شكرا،

وتام

هل كانت مفيدة؟

المحلول

وكنت أقترح عليك سحب هذا الرمز إلى بريمج الخاص بها. كنت تحاول المعتادة دورة حياة قصيرة الدائرة للمساهمة في المشروع وبينما كنت قد تكون قادرة على العثور على طريقة للقيام بذلك، فإنه من المحتمل أن يكون أكثر بساطة وربما أكثر نظافة لجعل مجرد بريمج الجديد الذي يتعامل مع هذا الملف XLS والسماح لها القيام الشيء الخاص به. يمكنك وضع الأشياء المناسبة في الجلسة مؤقتا من زر العمل الخاص بك، توجيهها إلى بريمج، الاستيلاء عليها في بريمج ومن ثم إخراجها من الدورة.

نصائح أخرى

ولقد نشرت بلوق وظيفة على وجه التحديد لتنفيذ ICEFaces <لأ href = "http://karlgrz.blogspot.com/2009/09/stream-excel-workbook-to-client.html" يختلط = "نوفولو noreferrer "> هنا .

وإجراءات استخدام زر بدلا من Actionlistener

وعملت بالنسبة لي

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top