Korzystanie z JDK 1.6, JSF 2.1, 2.2.1, PrimeFaces UM 3.2 i Apache Tomcat 7Eksport do Excela JSF i PrimeFaces
Próbuję konfiguracji serwletu, aby umożliwić pobieranie pliku excel oparte na wybór użytkownika. Dokument programu Excel jest tworzony w czasie wykonywania.
Brak błędów, a kod dostaje się do serwletu.
Klikam przycisk i nic się nie dzieje. Nie używam eksportu datatable używanego przez PrimeFaces, ponieważ muszę zmienić kolejność i niestandardowe formatowanie danych w dokumencie 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>
Nie chcę używać serwletu. myślałem, że ja też. Wyobraź sobie, że zmieniam to po tym, jak to działa. –
W takim przypadku sprawdź aktualizację odpowiedzi pod kątem sugestii przepisywania. "ExternalContext" ma wiele metod delegowania. Wykorzystaj je. http://download.oracle.com/javaee/6/api/javax/faces/context/ExternalContext.html Ostatecznie chcesz skończyć z ** zero ** 'importami javax.servlet' w twoim kodzie JSF. – BalusC
po prostu działało bez serwletu. naprawdę doceniam pomoc. –