Sử dụng JDK 1.6, JSF 2.1, PrimeFaces 2.2.1, POI 3.2, và Apache Tomcat 7Xuất sang Excel JSF và PrimeFaces
Tôi cố gắng để thiết lập một servlet để cho phép tải về của một tập tin excel dựa trên lựa chọn người dùng. Tài liệu excel được tạo ra khi chạy.
Không có lỗi và mã nào xâm nhập vào servlet.
Tôi nhấp vào nút và không có gì xảy ra. Tôi không sử dụng việc xuất dữ liệu mà PrimeFaces sử dụng vì tôi cần phải sắp xếp lại và định dạng tùy chỉnh trên dữ liệu trong tài liệu 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>
tôi không muốn sử dụng servlet. tôi cũng nghĩ vậy. defiantly nhìn vào thay đổi mà sau khi tôi nhận được điều này làm việc. –
Trong trường hợp đó, hãy kiểm tra cập nhật câu trả lời cho đề xuất viết lại. 'ExternalContext' có rất nhiều phương thức ủy nhiệm. Hãy sử dụng chúng. http://download.oracle.com/javaee/6/api/javax/faces/context/ExternalContext.html Cuối cùng bạn muốn kết thúc với nhập ** javax.servlet' không nhập ** trong mã JSF của bạn. – BalusC
chỉ có nó hoạt động mà không có servlet. thực sự đánh giá cao sự giúp đỡ. –