public void render( String name, String page, String info, String contentType, String encoding, HttpServletRequest request, HttpServletResponse response) throws ViewHandlerException { // some containers call filters on EVERY request, even forwarded ones, // so let it know that it came from the control servlet if (request == null) { throw new ViewHandlerException( "The HttpServletRequest object was null, how did that happen?"); } if (UtilValidate.isEmpty(page)) { throw new ViewHandlerException("View page was null or empty, but must be specified"); } if (UtilValidate.isEmpty(info)) { Debug.logInfo( "View info string was null or empty, (optionally used to specify an Entity that is mapped to the Entity Engine datasource that the report will use).", module); } // tell the ContextFilter we are forwarding request.setAttribute(ContextFilter.FORWARDED_FROM_SERVLET, Boolean.valueOf(true)); Delegator delegator = (Delegator) request.getAttribute("delegator"); if (delegator == null) { throw new ViewHandlerException("The delegator object was null, how did that happen?"); } try { JasperReport report = (JasperReport) jasperReportsCompiledCache.get(page); if (report == null) { synchronized (this) { report = (JasperReport) jasperReportsCompiledCache.get(page); if (report == null) { InputStream is = context.getResourceAsStream(page); report = JasperCompileManager.compileReport(is); jasperReportsCompiledCache.put(page, report); } } } response.setContentType("application/xls"); Map parameters = (Map) request.getAttribute("jrParameters"); if (parameters == null) { parameters = UtilHttp.getParameterMap(request); } JRDataSource jrDataSource = (JRDataSource) request.getAttribute("jrDataSource"); JasperPrint jp = null; if (jrDataSource == null) { String datasourceName = delegator.getEntityHelperName(info); if (UtilValidate.isNotEmpty(datasourceName)) { Debug.logInfo( "Filling report with connection from datasource: " + datasourceName, module); jp = JasperFillManager.fillReport( report, parameters, ConnectionFactory.getConnection(datasourceName)); } else { Debug.logInfo("Filling report with an empty JR datasource", module); jp = JasperFillManager.fillReport(report, parameters, new JREmptyDataSource()); } } else { Debug.logInfo("Filling report with a passed in jrDataSource", module); jp = JasperFillManager.fillReport(report, parameters, jrDataSource); } if (jp.getPages().size() < 1) { throw new ViewHandlerException("Report is Empty (no results?)"); } else { Debug.logInfo("Got report, there are " + jp.getPages().size() + " pages.", module); } JExcelApiExporter exporter = new JExcelApiExporter(); exporter.setParameter(JExcelApiExporterParameter.JASPER_PRINT, jp); exporter.setParameter(JExcelApiExporterParameter.OUTPUT_STREAM, response.getOutputStream()); exporter.exportReport(); } catch (IOException ie) { throw new ViewHandlerException("IO Error in report", ie); } catch (java.sql.SQLException e) { throw new ViewHandlerException("Database error while running report", e); } catch (Exception e) { throw new ViewHandlerException("Error in report", e); // } catch (ServletException se) { // throw new ViewHandlerException("Error in region", se.getRootCause()); } }