El uso de JDK 1.6, JSF 2.1, 2.2.1 PrimeFaces, POI 3.2 y Apache Tomcat 7Exportación a Excel JSF y PrimeFaces
estoy tratando de configurar un servlet para permitir una descarga de un archivo de Excel basado en el selección del usuario El documento de Excel se crea en tiempo de ejecución.
No hay errores y el código entra en el servlet.
Hago clic en el botón y no pasa nada. No utilizo la exportación de tabla de datos que utiliza PrimeFaces porque necesito hacer un reordenamiento y un formateo personalizado en los datos del documento de Excel.
ExportExcelReports.java
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=\"my.xls\"");
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
cell.setCellValue(0.0);
FileOutputStream out = new FileOutputStream("my.xls");
workbook.write(out);
out.close();
}
ProjectReportBean.java
public void getReportData() {
try {
FacesContext ctx = FacesContext.getCurrentInstance();
ExternalContext ectx = ctx.getExternalContext();
HttpServletRequest request = (HttpServletRequest) ectx.getRequest();
HttpServletResponse response = (HttpServletResponse) ectx.getResponse();
RequestDispatcher dispatcher = request.getRequestDispatcher("/ExportExcelReports");
dispatcher.forward(request, response);
ctx.responseComplete();
} catch (Exception e) {}
}
index.xhtml
<h:form id="reportsForm">
<h:outputLabel for="report" value="Reports" /><br />
<h:selectOneMenu id="report" value="#{projectReportBean.selectedReport}" required="true" requiredMessage="Select Report">
<f:selectItem itemLabel="---" noSelectionOption="true" />
<f:selectItems value="#{projectReportBean.reports}" />
</h:selectOneMenu>
<p:commandButton action="#{projectReportBean.getReportData}" value="Export" update="revgrid" />
</h:form>
no quiero usar el servlet. pensé que también tenía. Mirando desafiante a cambiar eso después de que esto funcione. –
En ese caso, verifique la actualización de respuesta para una sugerencia de reescritura. El 'ExternalContext' tiene muchos métodos de delegación. Haz uso de ellos. http://download.oracle.com/javaee/6/api/javax/faces/context/ExternalContext.html En última instancia, desea terminar con las importaciones ** zero ** 'javax.servlet' en su código JSF. – BalusC
acaba de hacerlo funcionar sin el servlet. realmente aprecio la ayuda. –